假设我有一个Kafka制作人。
我的消费者首先将消息M1写入Kafka上的主题T1(通过sync api),然后将消息M2写入主题T2。
那时消费者正在倾听话题T1和T2。每当它在主题T2上看到消息时,它就会在主题T1上查找相关消息。
是否保证每当消费者在主题T2上看到消息M2时,它将在主题T1上看到消息M1? (因为M1是在M2之前写的)
答案 0 :(得分:2)
关于担保的Kafka doc
https://kafka.apache.org/documentation/#intro_guarantees
在高级别Kafka提供以下保证:
生产者发送到特定主题分区的消息将按照发送顺序附加。也就是说,如果记录M1由同一生产者作为记录M2发送,并且首先发送M1,那么M1将具有比M2更低的偏移量并且在日志中出现得更早。
答案 1 :(得分:2)
不,不能保证
Kafka消费者无法根据流量阅读您主题的最新消息。 在高峰时期,您的消费者完全有可能在几分钟前就特定主题阅读消息,并在另一个主题上更新消息。
此外,它意味着一些严肃的调整,以确保您可以正确分发您的应用程序,关于分区的做法。
使用kafka消费者重新分区的默认行为,您将无法拥有多个消费者,从而消除了重要的Kafka优势,即水平可扩展性。
答案 2 :(得分:1)
不确定你是否想问你的问题。
是的,保证消费者最终会看到M1和M2。
但 保证在看到M2之前会看到M1 。完全允许它看到M2然后才接收M1,任意长时间之后。任意长,我们谈的是毫秒,而不是几天。
答案 3 :(得分:1)
是否保证每当消费者在主题T2上看到消息M2时,它将在主题T1上看到消息M1? (因为M1是在M2之前写的)
不,这不能保证。
Kafka不保证跨主题订阅消息。有关记录,请参阅Apache Kafka文档中的Guarantees,了解确切的内容。
在您的情况下,您确实有跨主题的消息(消息M1
位于主题T1
中,消息M2
位于主题T2
中),因此&#39 ;不保证何时相对于彼此,将会读取/消费消息M1
和M2
。
此外,当最终正在读取这两条消息时, time (或时间增量)无法保证 - 它们都可以在毫秒的时间间隔内读取,或者秒等等(实际上,消息通常会很快消耗掉。)