apache kafka_Apache Kafka消费者再平衡

apache kafka

消费者重新平衡决定哪个消费者负责某个主题的所有可用分区的哪个子集。 例如,您可能有一个包含20个分区和10个使用者的主题。 在重新平衡结束时,您可能希望每个使用者都从2个分区中读取数据。 如果关闭了这些使用者中的10个,则可能会期望每个使用者在重新平衡完成后具有1个分区。 消费者重新平衡是可以由Kafka自动处理的动态分区分配。

组协调员是负责与消费者进行通信以实现消费者之间平衡的经纪人之一。在早期版本中,Zookeeper存储了元数据详细信息,但最新版本存储在经纪人上。消费者协调员收到了所有消费者组消费者的心跳和轮询,因此他了解每个消费者心跳和管理者在分区上的偏移量。

小组组长:消费者组的一位消费者担任小组组长,由小组协调员选出,负责代表小组中的所有消费者做出分区分配决定。

重新平衡方案:

  1. 消费者组订阅任何主题
  2. 消费者实例无法使用session.heart.beat时间间隔发送心跳。
  3. 消费者的长时间流程超出了轮询超时
  4. 消费群体中的消费者通过例外
  5. 添加了新分区。
  6. 扩大消费者规模。 添加了新使用者或手动删除了现有使用者

消费者再平衡

消费者重新平衡是在消费者请求加入组或离开组时启动的。 小组负责人从小组协调员那里收到所有活跃消费者的名单。 组负责人使用PartitionAssigner决定分配给每个使用者的分区。 一旦组长完成分区分配,它就会将分配列表发送给组协调器,组协调器将这些信息发送回所有使用者。 组仅将适用的分区发送给其使用方,而不发送其他使用方分配的分区。 只有组长知道所有使用者及其分配的分区。 重新平衡完成后,消费者开始将“心跳”发送到仍活跃的“组协调器”。 使用者将OffsetFetch请求发送到组协调器,以获取为其分配的分区的最后提交的偏移量。 消费者开始消费新分配分区的消息。

国家管理

重新平衡时,组协调器将其状态设置为“重新平衡”,并等待所有消费者重新加入该组。

当组开始重新平衡时,组协调器首先将其状态切换为重新平衡,以便通知所有交互的使用者重新加入组。 重新平衡完成后,组协调器将创建新一代ID,并通知所有消费者,然后该组继续进行同步阶段,在此阶段,消费者发送同步请求,并等待直到组长完成生成新的分配分区。一旦消费者收到新的分配分区,他们便进入稳定阶段。

静态会员

您的重新平衡操作相当繁琐,因为它需要停止所有使用者并等待获取新分配的分区。 在每次重新平衡时,始终创建新一代id,这意味着刷新所有内容。 为了解决此开销,Kafka 2.3+引入了静态成员资格以减少不必要的重新平衡。 KIP-345

在静态成员资格状态下,消费者状态将保持不变,在重新平衡状态下,将应用相同的分配。 它使用新的group.instance.id来保留成员身份。 因此,即使在最坏的情况下,成员ID也会被改组以分配新的分区,但是仍然相同的使用者实例ID将获得相同的分区分配

 instanceId: A, memberId: 1, assignment: {0, 1, 2}  instanceId: B, memberId: 2, assignment: {3, 4, 5}  instanceId: C, memberId: 3, assignment: {6, 7, 8} 

重启后:

 instanceId: A, memberId: 4, assignment: {0, 1, 2}  instanceId: B, memberId: 2, assignment: {3, 4, 5}  instanceId: C, memberId: 3, assignment: {6, 7, 8} 

参考:

  1. https://www.confluent.io/blog/kafka-rebalance-protocol-static-membership
  2. https://cwiki.apache.org/confluence/display/KAFKA/KIP-345%3A+Introduce+static+membership+protocol+to+reduce+consumer+rebalances

翻译自: https://www.javacodegeeks.com/2020/06/apache-kafka-consumer-rebalance.html

apache kafka

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 注解总结

一、注解定义 注解早在J2SE1.5就被引入到Java中,主要提供一种机制,这种机制允许程序员在编写代码的同时可以直接编写元数据。 二、元注解 Target 说明了被修饰的注解的应用范围,也就是被修饰的注解可以用来注解哪些程序元…

编译原理三大经典书籍(龙书 虎书 鲸书)

以下内容转自: http://blog.csdn.net/skymingst/article/details/7436892 1、龙书(Dragon book) 英文名:Compilers: Principles,Techniques,and Tools 作者:Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman 中文名&…

两个时间之间是多少小时_那是两个小时我不会回来

两个时间之间是多少小时正如我之前关于linting主题所说的 ,花时间修改代码的好处很有限,因为自动工具告诉您这样做。 更糟糕的是,这些工具并非万无一失。 例如,我们一直在针对完美无害的try-with-resources构造周围的SpotBugs警告…

java的类载入器

【0】README 0.1)本文文字转自: 深入剖析tomcat, 旨在 理解 jvm 的类载入器; 【1】 jvm的类载入器相关 1)jvm 使用了3种类载入器来载入所需要的类:分别是引导类载入器(bootstrap class load…

Java 代理总结

一、代理 为其他对象提供一种代理以便控制对这个对象的访问。 (1)静态代理 (2)动态代理 1)JDK自带的动态代理 2)javaassist字节码操作库实现 3)CGLIB 4) ASM(底层…

分解因数 递归_递归分解WAR文件

分解因数 递归抽象 是否曾经需要分解WAR文件以及分解WAR文件中的所有JAR文件? 是的,我也是! 我写了ferris-war-exploder来爆炸: 一个JAR文件 一个WAR文件,它找到的每个JAR文件也会爆炸。 包含每个JAR文件&#xff…

jvm(2)-java内存区域

【0】README 0.1)本文转自 深入理解jvm, 旨在学习 java内存区域 的基础知识; 【1】运行时数据区域 1)jvm 所管理的内存将会包括以下几个运行时数据区域 1.1)方法区;(线程共享) 1.2&…

Java Socket编程总结

一、网络API InetAddress     用于标识网络上的硬件资源,主要是IP地址 URL         统一资源定位符,通过URL可以直接读取或写入网络上的数据Sockets      使用TCP协议实现的网络通信Socket相关的类Datagram     使用UDP协议&am…

java插入排序_Java程序要插入排序

java插入排序Java程序插入示例的排序。 显示了示例仿真以及时间复杂度。 插入排序是一种简单的排序算法,可以一次构建一个最终的排序数组(或列表)。 它比冒泡排序有效得多,并且在大型列表上的效率比快速排序 ,堆排序或…

jvm(2)-JVM内存的设置(解决eclipse下out of memory问题)

【0】README 0.1)本文转自: http://blog.csdn.net/sjf0115/article/details/8889201 一、JVM内存的设置的原理 默认的java虚拟机的大小比较小,在对大数据进行处理时java就会报错:java.lang.OutOfMemoryError。 设置jvm内存的方…

Java Servlet总结

一、Servlet简介 Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实…

java oca_OCA第1部分中的Java难题

java oca我在业余时间正在阅读Mala Gupta的Oracle认证Java SE程序员助理书,我对所学到的一些新知识感到惊讶。 有时候他们真的没有道理,有时候他们说得通,但真的让人惊讶。 因此,在本系列文章中,我想将它们共享为“ Ja…

jvm(1)-走进java

【0】README0.1)本文转自 深入理解 jvm,旨在了解 java 体系结构;【1】java技术体系1) Sun 官方所定义的java 技术系统包括以下几个组成部分: java 程序设计语言;各种硬件平台上的java 虚拟机;Cl…

Java 高并发下的实践

一、使用的技术HashMap ConcurrentHashMap Lock ReadWriteLock synchronized 二、一百万并发下的组合 ConcurrentLockMap /** To change this license header, choose License Headers in Project Properties.* To change this template file, choose Tools | Templates* …

java oca_OCA第2部分中的Java难题

java oca欢迎使用OCA的Java Puzzlers的第二部分。 在这一部分中,我们将看到一个有趣的案例,涉及Java 7附带的数字文字中的下划线分隔符。 在下面的类中,您可以在十进制文字中看到分隔符下划线。 还请注意,该类现在可以正常编译。…

jvm(2)-OutOfMemoryError 异常(内存溢出异常)

【0】README0.1)本文转自 深入理解 jvm, 旨在学习 OutOfMemoryError 异常(内存溢出异常) 的触发类型;0)准备知识0.1)除了程序计数器外,虚拟机内存的其他几个运行时区域(方…

java oca_OCA第7部分中的Java难题

java oca在OCA系列的Java Puzzlers的这一部分中,我将展示定义字符串和与之相关的潜在惊喜的多种方法。 创建字符串的两种基本类型是使用new关键字和仅使用字符串文字来创建。 String strWithNew new String( "hey" ); String strWithLiteral "ho&…

Java GC总结

一、gc两大基本算法1、引用计数法 2、根搜索法 二、gc改进收集算法 1、标记-清除算法 2、复制算法 3、标记-整理算法 分代收集算法 三、gc的类型 串行垃圾回收器(Serial Garbage Collector) 并行垃圾回收器(Parallel Garbage Collecto…

让CentOS能用yum自动安装rar和unrar

【0】README 0.1)本文转自: http://www.centoscn.com/CentOS/config/2015/0520/5485.html 目的:让CentOS能用yum自动安装rar和unrar 系统环境: CentOS 7.0 具体操作步骤如下: 1.编辑文件 编辑dag.repo文件&#xff0c…

java oca_OCA第6部分中的Java难题

java oca即使对于新的Java开发人员,构造函数也可能不是什么大谜。 本质上,当您创建一个类的实例时,该类的构造函数就会启动。 在Java Puzzlers系列的第6部分中,我们将看到一个与构造函数有关的案例。 public class Puzzler { publ…