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 - 主题 & 分区 & 消费者的主要内容,如果未能解决你的问题,请参考以下文章

kafka常用命令

Kafka-语义&重复消费&丢失数据&分区有序

Kafka Q&A

kafka学习笔记 & 面经分享

kafka学习笔记 & 面经分享

kakfa从入门到放弃: 相关概念,幂等性&事务