Kafka的行为

j2datikz  于 2021-06-08  发布在  Kafka
关注(0)|答案(3)|浏览(204)

你能解释一下kafka分区在这个场景中是如何工作的吗
如果我用1个主题和3个分区生成9(1-9)条消息循环。
这是否意味着:
分区1包含:[1,4,7]
分区2包含:[2,5,8]
分区3包含:[3,6,9]
?
还有多少消费者可以获得所有数据3?为什么?
你能解释一下吗?
我想消费者群体也能解决这个问题,但不知道为什么

nzkunb0c

nzkunb0c1#

你能解释一下kafka分区在这个场景中是如何工作的吗
你的理解是正确的。
还有多少消费者可以获得所有数据3?为什么?
取决于你的消费群体中有多少消费者。
如果一个组中只有一个使用者,它将从所有分区获取所有消息。
如果一个组中有两个使用者,则每个使用者都将声明分区的一个子集,例如,第一个使用者将从分区1和分区2获取所有消息,第二个使用者将从分区3获取消息。
如果一个组中有3个使用者,则每个使用者将分配一个分区。
如果一个组中有3个以上的使用者,则3个使用者将分别获得一个分区,其余的使用者将不会获得任何消息,只是在故障转移时充当冗余。

pcww981p

pcww981p2#

当且仅当您发布没有密钥的消息时,分区中的消息分布才是正确的。在kafka中,以(键、值)对的形式发布消息是很常见的,如果以这种方式生成消息,那么默认的分区器将确保具有相同键的所有消息都放在相同的分区中。它通过对Map到一个可用分区的每个键使用哈希函数来实现。在极端情况下,您的所有消息都具有相同的密钥,那么它们都将进入相同的分区。如果您的所有消息都有一个字符串键“foo”或一个名为“bar”的键,那么所有键为“foo”的消息都可以转到分区3,所有键为“bar”的消息都可以转到分区1。
就你关于消费者的问题而言,你可以拥有无限数量的消费者。若每个使用者都有一个唯一的group.id,那个么它们就被认为是独立的,它们将从所有分区获得自己的完整消息集。
但是,如果您有共享同一group.id的使用者,则它们被称为在使用者组中,并且每个使用者将获得分区的一个独占且大致相等的子集。如果在同一组中有3个消费者,他们将得到每个分区。如果在同一个组中添加了3个以上的使用者,则前3个使用者将分别获得1个分区,而所有其他使用者将成为备用使用者,而不是仅当3个活动使用者中的一个离开组时才变为活动使用者。

unhi4e5o

unhi4e5o3#

通过分区分发消息的想法是正确的。分区是Kafka的平行单元。
您可以有3个使用者,每个使用者将处理一个分区,但是您也可以只有1个使用者将从3个分区获取数据。这取决于每个消费者的吞吐量。
关于消费者群体:
如果您的所有消费者都具有相同的消费者组,则消息将在消费者之间进行负载平衡
如果您的使用者有不同的使用者群组,则每个讯息都会广播给所有使用者处理序
仅供参考:消息顺序只保留在一个分区内,这就是为什么来自不同分区的消息可能是无序的。

相关问题