我正在努力更好地理解 Kafka 的工作原理。为简单起见,目前我在一个 Zookeeper 上运行 Kafka,它有 3 个代理和一个重复因子为 3 的分区。我了解到,一般来说,最好有分区数 ~= 消费者数。
问题 1:主题是否在同一个分区中共享偏移量?
我在一个分区(例如分区 0)上有多个主题(例如dogs
, cats
, dinosaurs
)。现在我的制作人已经为每个主题制作了一条消息。"msg: bark"
到dogs
,"msg: meow"
到cats
和"msg: rawr"
到dinosaurs
。我注意到,如果我指定dogs[0][0]
,我会返回,如果我在和bark
上执行相同操作,我会分别返回每条消息。这是一个很棒的功能,但与我的理解相矛盾。我认为偏移量是特定于分区的。如果我按顺序将三条消息推送到一个分区中。消息不应该用 0、1 和 2 来索引吗?现在看来,偏移量是特定于某个主题的。cats
dinosaurs
这就是我想象的样子
['bark', 'meow', 'rawr']
实际上,它看起来像这样
['bark']
['meow']
['rawr']
但那不可能。必须有一些东西来跟踪偏移量和消息在日志文件中的实际物理位置。
问题 2:如果您要为一个主题设置多个分区,您如何管理您的消息?
在问题 1 中,我在一个分区中有多个主题,现在假设我为一个主题有多个分区。例如,我有 4 个dogs
主题分区,我有 100 条消息要推送到我的 Kafka 集群。我是否将消息均匀分布在分区中,例如 25 进入分区 1,25 进入分区 2 等等......?
如果消费者想要一次消费所有这 100 条消息,他/她需要访问所有四个分区。这与用 100 条消息击中 1 个分区有何不同?网络带宽是否会造成瓶颈?
先感谢您