只是想要正确理解基础知识。
假设我有一个名为“myTopic”的主题,它有3个分区P0,P1& P2。 每个分区都有一个领导者,该主题的数据(消息)分布在这些分区中。
1。生产者将始终基于代理上的负载以循环方式写入分区的领导者。是吗?
2。生产者如何知道分区的领导者?
第3。阅读特定主题的消费者应阅读该主题的所有分区?这是正确的吗?
感谢您的帮助。
答案 0 :(得分:3)
- 生产者将始终基于代理上的负载以循环方式写入分区的领导者。是吗?
醇>
默认情况下,是。
也就是说,生产者也可以决定使用自定义分区方案,即分区数据写入的不同策略。
- 制作人如何知道分区的领导者?
醇>
通过Kafka协议。
- 阅读特定主题的消费者应阅读该主题的所有分区?这是对的吗?
醇>
默认情况下,是。
那就是说,你也可以实施,例如实现定制逻辑的消费者应用程序,例a"采样"仅从N个分区中的1个读取的消费者。
答案 1 :(得分:2)
生产者将始终写入分区的领导者
是的,永远。
以循环方式为基础,基于经纪人的负担
没有。如果在ProducerRecord上显式设置了分区,则使用该分区。否则,如果提供了自定义分区程序实现,则确定该分区。否则,如果msg键不为null,则密钥的散列将用于始终将具有相同密钥的msgs发送到同一分区。如果msg键为null,则只有msg才会以循环方式发送到任何分区。但是,这与经纪人的负担无关。
- 制作人如何知道分区的领导者?
醇>
定期向经纪人询问元数据。
- 阅读特定主题的消费者应阅读该主题的所有分区?这是对的吗?
醇>
消费者组成消费者群体。如果使用者组中有多个使用者实例,则每个实例都会消耗一部分分区。但整个消费者群体消耗所有分区。也就是说,除非你决定去低水平"并自己管理,你可以做。