ApacheKafka送货单

ezykj2lf  于 2021-06-07  发布在  Kafka
关注(0)|答案(4)|浏览(179)

假设我有一个Kafka制作人。
我的消费者首先将消息m1写入kafka上的主题t1(通过syncapi),然后将消息m2写入主题t2。
此时,消费者正在收听主题t1和t2。每当它看到主题t2上的消息时,它就会在主题t1上查找相关消息。
是否保证每当消费者看到主题t2上的消息m2时,就会看到主题t1上的消息m1(因为m1写在m2之前)

blmhpbnm

blmhpbnm1#

不,不能保证
Kafka消费者不一定会阅读关于你主题的最后一条信息,这取决于流量。在峰值情况下,您的消费者很可能正在阅读几分钟前关于某个给定主题的消息,而在另一个主题上阅读最新消息。
此外,它还意味着一些重要的调整,以确保您可以正确地分发应用程序,这与分区做作有关。
由于kafka消费者重新划分的默认行为,您将无法拥有多个消费者,从而消除了kafka的一个重要优势,即水平可伸缩性。

um6iljoc

um6iljoc2#

Kafka关于担保的文件
https://kafka.apache.org/documentation/#intro_guarantees
在高层,Kafka提供了以下保证:
生产者发送到特定主题分区的消息将按发送顺序追加。也就是说,如果记录m1由与记录m2相同的生产者发送,并且首先发送m1,那么m1的偏移量将低于m2,并且在日志中出现得更早。
使用者示例按记录在日志中的存储顺序查看记录。对于复制因子为n的主题,我们最多可以容忍n-1个服务器故障,而不会丢失提交到日志的任何记录。

w51jfk4q

w51jfk4q3#

是否保证每当消费者看到主题t2上的消息m2时,就会看到主题t1上的消息m1(因为m1写在m2之前)
不,这不是保证。
Kafka不保证跨主题的消息排序。为了记录在案,请参阅apachekafka文档中的担保,以了解担保的具体内容。
在您的例子中,您确实有跨主题的消息(消息) M1 在主题中 T1 ,消息 M2 在主题中 T2 ),因此无法保证消息的相对时间 M1 以及 M2 将被读取/消耗。
另外,对于这两条消息最终被读取的时间(或时间差)也没有保证——它们都可以在毫秒或秒等时间间隔内被读取(但实际上,消息通常会很快被消耗)

yb3bgrhw

yb3bgrhw4#

不知道你是否想问你问了什么。
是的,可以保证消费者最终会同时看到m1和m2。
但不能保证在看到m2之前先看到m1。完全允许它看到m2,然后才接收m1,任意长时间之后。我们说的是毫秒,当然不是天。

相关问题