跳转到主要内容
Chinese, Simplified

静态成员

为了减少暂时性故障导致的用户重新平衡,Apache Kafka 2.3在KIP-345中引入了静态成员的概念。

静态成员关系背后的主要思想是,每个使用者实例附加到一个由group.instance.id配置的惟一标识符。成员关系协议已被扩展,以便通过JoinGroup请求将id传播到代理协调器。

Image for post

如果一个使用者由于临时故障而被重新启动或终止,代理协调器直到session.timeout才会通知其他使用者需要进行重新平衡。msi达成。其中一个原因是,当用户被停止时,他们将不会发出sendLeaveGroup请求。

Image for post

当使用者最终重新加入组时,代理协调器将返回缓存的赋值,而不进行任何再平衡。

Image for post

在使用静态成员关系时,建议增加使用者属性session.timeout。ms大到经纪人协调器不会触发太频繁的再平衡。

一方面,静态成员资格对于限制不受欢迎的再平衡的数量,从而最大限度地减少“停止世界”的影响是非常有用的。另一方面,这样做的缺点是增加了分区的不可用性,因为协调代理可能只在几分钟后才检测到失败的使用者(取决于session.timeout.ms)。不幸的是,这是在分布式系统中必须在可用性和容错之间进行的永久权衡。

 

增量合作再平衡

从版本2.3开始,Apache Kafka还引入了新的嵌入式协议,以提高每个成员的资源可用性,同时最小化停止世界的影响。

这些新协议背后的基本思想是,逐步地、合作地进行再平衡——换句话说,这意味着要进行多次再平衡,而不是一次全球性的再平衡。

增量协作再平衡最初是通过KIP-415为Kafka Connect实现的(部分在Kafka 2.3中实现)。此外,Kafka 2.4和KIP-429的用户也可以使用它。

Kafka连接限制

Kafka Connect使用组成员协议将连接器和任务均匀地分配给组成一个连接集群的工作人员。因此,当节点失败/重启、任务增加/减少以及配置被提交/更新时,工作人员会相互协调以重新平衡连接器和任务。

但是,在Kafka 2.3之前,只要出现其中一种情况,所有现有连接器的执行都会中断(i。e stop-the-word)。因此,很难扩大具有几十个连接器的互助性集群。

渐进合作再平衡试图通过两种方式解决这一问题:

  • 1)仅对已撤销的资源停止任务/成员。
  • 2)处理成员之间资源分配的临时不平衡,可以是立即的,也可以是延迟的(对于滚动重启很有用)。

为此,增量合作再平衡原则实际上退化为三种具体设计:

  1. 设计一:简单的合作再平衡
  2. 设计二:不平衡的延迟解决
  3. 设计三:增量解决不平衡

为了让你更好地理解增量合作再平衡是如何工作的,我们将在Kafka Connect的背景下说明design II。

延期解决不平衡

首先,让我们从一个简单的连接集群开始,该集群由三个worker组成,初始任务/连接器分配如下:

Image for post

1 -初始赋值

现在,让我们假设W2在没有任何特殊原因的情况下失败并由于会话超时而离开组。再平衡被触发,剩下的工人W1和W3重新加入了这个群体。在发送JoinGroup请求时,工作程序包括它们以前的分配。使用组成员协议的现有字段member_metadata共享分配。

Image for post

2 - W2离开集团,触发再平衡(W1, W3加入)。

W1被选为组长,并通过计算与以前分配的区别来执行任务/连接器分配。在这里,leader检测到一些任务和连接器在以前的分配中没有显示。

Image for post

3 - W1成为领导者并计算任务

W1发送新分配的任务/连接器以及已撤销的。您可以注意到,W1实际上不会尝试立即解决分配丢失(或不平衡)。相反,它将推迟解决方案,安排下一次再平衡,让失败的成员国有机会重新出现。调度延迟由一个新的配置scheduled.rebalance.max.delay.ms固定(默认情况下,它等于5分钟)。

注意:使用增量协作再平衡,当成员接收到新的分配时,它将开始处理任何新的分区(或任务/连接器)。此外,如果赋值还包含被撤销的分区,那么它将停止处理、提交,然后立即启动另一个join组。这样做的效果是增加了重新平衡的数量,但只会停止分配发生变化的资源。

Image for post

4 - W1, W3接收任务

W2在延迟到期之前重新加入组,并触发另一个再平衡。W1和W2也重新加入这个组。

Image for post

5 - B在延迟到期前重新加入组,并触发再平衡

但是,在计划的重新平衡延迟到期之前,W1不会重新分配丢失的任务/连接器。

Image for post

6 - W1成为领导者并计算任务

在剩余的延迟到期后,最终的再平衡被触发,所有工人重新加入该集团。

Image for post

7 - W1, W2, W3接收任务

最后,组长将A-Task-1和Connector-B重新分配到W2。在所有的再平衡过程中,W1和W3从未停止他们所分配的任务。

Image for post

8 -延迟后,所有成员加入

结论

再平衡协议是Apache Kafka中消费机制的一个重要组件。但是,它也可以作为一种通用协议来协调组成员和在组成员之间分配资源。g卡夫卡连接)。静态成员关系和增量协作再平衡都是重要的特性,它们使Apache Kafka协议更加健壮和可伸缩,从而为其提供了巨大的改进。

要了解更多关于再平衡协议及其工作原理,请查看以下链接。

来源:

本文:http://jiagoushi.pro/node/1114

讨论:请加入知识星球【首席架构师圈】或者小号【jiagoushi_pro】

原文地址
https://medium.com/streamthoughts/apache-kafka-rebalance-protocol-or-the-magic-behind-your-streams-applications-e94baf68e4f2
Tags
 
Article
知识星球
 
微信公众号
 
视频号