2017-05-18 242 views
0

只是想正确理解基础知识。卡夫卡 - 主题&分区和消费者

假设我有一个名为“myTopic”的主题,它有3个分区P0,P1 & P2。 这些分区中的每一个都有一个引导器,并且这个主题的数据(消息)分布在这些分区中。

1.生产者将总是基于代理的负载以循环方式向分区的领导写入数据。是对的吗?

2.生产者如何知道分区的领导者?

3.阅读特定主题的消费者应阅读该主题的所有分区?那是对的吗?

感谢您的帮助。

+0

在SO中,有一种非常特殊的方式*实际*说出“感谢你的帮助” - 接受和/或提供有用的答案(这为受访者带来了宝贵的时间......) – desertnaut

回答

1
  1. 生产者总是会写入分区的领导者基于对经纪人的负载循环方式。是对的吗?

默认情况下,是。也就是说,生产者也可以决定使用自定义分区方案,即写入分区数据的不同策略。

  1. 生产者如何知道分区的领导?

通过卡夫卡协议。

  1. 阅读特定主题的消费者应阅读该主题的所有分区?那是对的吗?

默认情况下,是。

也就是说,你也可以实现例如实现定制逻辑的消费应用程序,例如一个“抽样”消费者,只能从N个分区中的1个读取。

0

生产者将永远写入分区

是的,永远的领导者。

在循环方式

基于

号如果分区被显式地设置在ProducerRecord则使用该分区的代理的负载。否则,如果提供了自定义分区程序实现,则会确定分区。否则,如果msg密钥不为空,密钥的散列将用于始终将相同密钥的消息发送到同一分区。如果msg密钥为空,那么只有msg才会以循环方式发送到任何分区。但是,这与经纪人的负担无关。

  1. 生产者如何知道分区的领导?

通过定期向代理询问元数据。

  1. 阅读特定主题的消费者应阅读该主题的所有分区?那是对的吗?

消费者形成消费群体。如果消费者组中有多个消费者实例,则每个实例都使用这些分区的子集。但整个消费群体从所有分区消费。也就是说,除非你决定去“低级”并自己管理,你可以做。

相关问题