Apache kafka 卡夫卡分区的行为
你能解释一下kafka分区在这个场景中是如何工作的吗 如果我用1个主题和3个分区生成9(1-9)条消息循环 这是否意味着: 分区1包含:[1,4,7] 分区2包含:[2,5,8] 分区3包含:[3,6,9] ? 还有多少消费者可以获得所有数据3?为什么? 你能解释一下吗Apache kafka 卡夫卡分区的行为,apache-kafka,kafka-consumer-api,Apache Kafka,Kafka Consumer Api,你能解释一下kafka分区在这个场景中是如何工作的吗 如果我用1个主题和3个分区生成9(1-9)条消息循环 这是否意味着: 分区1包含:[1,4,7] 分区2包含:[2,5,8] 分区3包含:[3,6,9] ? 还有多少消费者可以获得所有数据3?为什么? 你能解释一下吗 我想消费者小组也可以解决这个问题,但不确定为什么通过分区分发消息的想法是正确的。分区是卡夫卡的平行单位 您可以有3个使用者,每个使用者将处理一个分区,但您也可以只有1个使用者将从3个分区获取数据。这取决于每个消费者的吞吐量 关于
我想消费者小组也可以解决这个问题,但不确定为什么通过分区分发消息的想法是正确的。分区是卡夫卡的平行单位 您可以有3个使用者,每个使用者将处理一个分区,但您也可以只有1个使用者将从3个分区获取数据。这取决于每个消费者的吞吐量 关于消费者群体:
- 如果您的所有消费者都具有相同的消费者组,则消息将在消费者上进行负载平衡
- 如果您的使用者具有不同的使用者组,则每个消息都将广播到所有使用者进程
如果一个组中有3个以上的使用者,则3个使用者将分别获得一个分区,其余的使用者将不会获得任何消息,只是在故障切换时充当冗余。仅当您发布没有密钥的消息时,分区中的消息分布才是正确的。在Kafka中,通常将消息发布为(键、值)对,如果以这种方式生成消息,则默认分区器将确保具有相同键的所有消息都放在同一分区中。它通过对映射到一个可用分区的每个键使用哈希函数来实现这一点。在极端情况下,如果所有消息都具有相同的密钥,那么它们都将进入相同的分区。如果您的所有消息都有一个字符串键“foo”或一个名为“bar”的键,那么所有带有键“foo”的消息都可以转到分区3,而带有键“bar”的所有消息都可以转到分区1 就你关于消费者的问题而言,你可以拥有无限数量的消费者。若每个使用者都有一个唯一的group.id,那个么它们被认为是独立的,它们将从所有分区获得自己的完整消息集 但是,如果您有共享同一group.id的使用者,则它们被称为在使用者组中,并且每个使用者将获得一个独占的、大致相等的分区子集。如果在同一个组中有3个使用者,则每个使用者将获得1个分区。如果在同一组中添加了超过3个使用者,则前3个使用者将分别获得1个分区,所有其他使用者将成为备用使用者,而不是仅当3个活动使用者中的一个离开组时才变为活动