我阅读了kafka文档,但是当有人谈论数据和分区时,我仍然感到困惑。 在文档中,我看到客户端将消息发送到分区。 然后将复制消息分区到副本(跨代理)。 消费者从分区读取数据。
我有一个包含2个分区的主题。 假设我有一个生产者,它向分区1发送消息。 但是我有2个使用者,一个从分区1读取,第二个从分区2读取。 这是否意味着我的分区1将具有50%的消息,而分区2将具有50%的消息。还是当客户端将数据发送到分区1时,分区1应该不仅在代理之间而且在跨分区中都是复制数据?
答案 0 :(得分:0)
关于您的特定示例...
如果生产者发送的消息没有消息上的键,则默认分区器(在生产者本身中)将采用循环算法将消息发送到分区,因此:消息1到分区1,消息2到分区2,消息3到分区1,依此类推。这表示您是对的,分区1将获得50%的消息。因此,一个从分区1中读取的使用者将获得50%的已发送邮件;其余的50%将由分区2中的其他消费者读取。这就是Kafka的工作原理,它具有更高的吞吐量和处理更多的消费者。 重要的是要补充一点,当分区具有更多副本时,其中一个副本被视为“领导者”,而另一个副本则为“跟随者”。消息交换始终通过“领导者”进行。 “追随者”只是副本。如果托管“ leader”分区的代理发生故障,而另一个托管“ follower”分区的代理被选为“ leader”,则使用它们。
我希望这会有所帮助。