Kafka - 主题 & 分区 & 消费者
Posted
技术标签:
【中文标题】Kafka - 主题 & 分区 & 消费者【英文标题】:Kafka - Topic & Partitions & Consumer 【发布时间】:2017-10-17 21:01:09 【问题描述】:只是想正确理解基础知识。
假设我有一个名为“myTopic”的主题,它有 3 个分区 P0、P1 和 P2。 这些分区中的每一个都将有一个领导者,并且该主题的数据(消息)分布在这些分区中。
1.生产者将始终根据代理上的负载以循环方式写入分区的领导者。对吗?
2。生产者如何知道分区的领导者?
3.阅读特定主题的消费者应该阅读该主题的所有分区?对吗?
感谢您的帮助。
【问题讨论】:
在 SO 中,有一种非常特殊的方式可以实际说“感谢您的帮助” - 接受和/或赞成有帮助的答案(这会占用受访者的宝贵时间.. .) 【参考方案1】:生产者将始终根据代理上的负载以循环方式写入分区的领导者。对吗?
默认情况下是的。
也就是说,生产者也可以决定使用自定义分区方案,即写入分区数据的不同策略。
生产者如何知道分区的领导者?
通过 Kafka 协议。
阅读特定主题的消费者应该阅读该主题的所有分区吗?对吗?
默认情况下是的。
也就是说,您还可以实现例如实现自定义逻辑的消费者应用程序,例如仅从 N 个分区中的 1 个读取的“采样”消费者。
【讨论】:
【参考方案2】:Producer 将始终写入分区的领导者
是的,总是。
根据代理的负载以循环方式进行
没有。如果在 ProducerRecord 上明确设置了分区,则使用该分区。否则,如果提供了自定义分区器实现,则确定分区。否则,如果 msg key 不为 null,则 key 的 hash 将用于一致地将具有相同 key 的 msgs 发送到同一分区。如果 msg 键为空,则只有 msg 确实会以循环方式发送到任何分区。但是,这与代理的负载无关。
生产者如何知道分区的领导者?
通过定期向代理询问元数据。
阅读特定主题的消费者应该阅读该主题的所有分区吗?对吗?
消费者组成消费者群体。如果一个消费者组中有多个消费者实例,则每个实例都使用分区的一个子集。但是消费者组作为一个整体从所有分区中消费。也就是说,除非您决定去“低级”并自己管理,否则您可以做到。
【讨论】:
以上是关于Kafka - 主题 & 分区 & 消费者的主要内容,如果未能解决你的问题,请参考以下文章