多个发布者如何发布到主题/分区?



我认为这些问题与之前提出的一些问题相似,但我不太理解,无法确定它们是否是相同的问题。

以下是我的问题:

  1. 对于具有3个分区的主题,每个分区都有一个代理leader,并且单个发布者(轮询)将向所有三个代理leader发布。正确吗?

  2. 对于一个有3个分区和三个正在运行的发布者实例的主题,每个发布者将使用所有三个代理leader。这三个发布者实例不会专门与三个代理leader中的一个对齐。正确吗?

  3. 与其开发一个在出版商之间划分工作的模型,出版商不抵消内部主题管理吗?它应该帮助发布者了解它在发布事件中的位置,以及从哪里开始寻找下一个要发布的事件。这只适用于三个发布者模型,如果发布者共享内部发布者偏移主题。我想事实并非如此吧?每个发布者实例都有自己的内部偏移主题。

这是我从一个同事那里得到的答案:

#1对于有3个分区的主题,每个分区都有一个代理leader,并且一个发布者(轮询)将向所有三个代理leader发布。正确吗?对于具有3个分区的主题,每个分区都有一个broker-leader和一个publisher,如果它们配置了它们的ProducerRecord<K,V>(https://kafka.apache.org/25/javadoc/org/apache/kafka/clients/producer/ProducerRecord.html)如果既没有密钥也没有分区,那么分区将以轮询方式分配。因为topic分区是复制的单位(https://kafka.apache.org/documentation/#replication), Kafka中的每个分区都有一个单独的broker-leader,所有的读写都要经过这个leader,所以说一个publisher将向所有三个broker leader发布是正确的。

#2对于一个有3个分区和三个正在运行的发布者实例的主题,每个发布者将使用所有三个代理leader。正确的。这三个发布者实例不会专门与三个代理leader中的一个对齐。正确吗?如果每个发布者都被配置为创建一个producerrecordk,V>它进入了一个特定的分区,那么可能是这样。然而,如果这三个发布者完全独立且彼此不知道,被配置为创建使用特定分区的ProducerRecords,情况可能就不是这样了。最终,由生产者决定他们要写哪个分区,或者信任代理分配的哈希或轮循分布。

#3与其开发一个将工作分配给出版商的模型,出版商不抵消内部主题管理吗?它应该帮助发布者了解它在发布事件中的位置,以及从哪里开始寻找下一个要发布的事件。这只适用于三个发布者模型,如果发布者共享内部发布者偏移主题。我想事实并非如此吧?每个发布者实例都有自己的内部偏移主题。如果你指的是发布者可以将其当前偏移量存储在Kafka主题中,并通过依赖已提交的主题偏移量与其他发布者协同工作的想法,我想先澄清一些术语。如果一个生产者同时也是一个消费者,那么这个工作者/线程/应用/路由的消费者面或性质就是包含偏移量的部分。例如,如果你正在从网络共享中消费文件,你可能会将它们移动到一个隐藏文件夹中,或者在完成消费它们以发布到kafka主题时删除它们,这是一种简单但有效的方法,可以标记哪些文件已被消费和发布,哪些文件已准备好消费。在Kafka中,偏移量指的是主题中最新可用的消息。所以在这里,我假设你的意思是你的生产者也是一个kafka消费者,并且在将完成的工作发布到另一个主题进行进一步处理之前正在做一些工作,比如充实。如果您想以这种方式在消费者-生产者之间进行协调,我将创建一个具有单一消息类型的单一主题,但是发布来自每个消费者-生产者的消息,并附带说明哪个是哪个的标题。然后,在消费者-生产者启动时,您可以首先从偏移量主题中消费消息,过滤报头以确定哪个偏移量消息属于单个工作者,然后在它获得的偏移量处启动流。

最新更新