如果生产者崩溃,卡夫卡消费者的行为如何。生产者中断时间隔中的数据会发生什么

时间:2019-05-21 07:05:39

标签: apache-kafka

我只想知道生产者停机时消费者如何使用数据。假设生产者不断以稳定的速度向用户发送日志,然后生产者从上午8点到下午6点下降。在这种情况下,消费者如何工作?如果生产者启动了,消费者是否可以获取早上8点至下午6点之间发送的数据。

2 个答案:

答案 0 :(得分:1)

在Apache Kafka中,生产者和消费者的行为之间没有关系。 作为消息传递系统,Kafka允许将生产者与提供异步通信通道的消费者分离。 生产者可以按照自己的速度发送消息,而消费者可以按自己的速度实时或稍后阅读这些消息(与生产者不同)。 消息保存在Kafka集群中的主题中,每条消息在主题分区中都有一个位置(偏移量)。 当然,如果消费者长时间不在线阅读消息,则可以调整从主题中删除消息的时间。 您可以设置将信息存储很长时间(几天,几周,几个月),然后将其删除;或者您可以设置为根据时间存储消息(因此删除早于时间的消息)。 此外,消费者还可以倒退主题中的消息流,并在需要时实际重新读取消息。 最后,消费者还可以根据偏移量或指定时间在主题分区中寻找特定位置。

答案 1 :(得分:0)

Kafka文档有一个很好的图表,我在下面复制了它。它以简洁的方式展示了卡夫卡的新颖性。 enter image description here

没有卡夫卡,情况就是这样。我们有多个服务器,例如前端服务器,数据库服务器,聊天服务器等。另一方面,我们可能有不同的指标和监视工具(例如数据库监视器,UI监视器等)。不同服务器和收集器之间的直接一对一通信可能适用于较小的系统,但是就可伸缩性而言,在系统超过特定阈值后,它会很快中断。 Kafka通过将发送方和接收方解耦来解决此问题。他们两个都是通过Kafka经纪人交谈,而不是彼此交谈。

因此,在您的情况下,消费者只需询问经纪人是否有关于其订阅的主题的任何新数据。当生产者宕机并且假设队列中没有数据时,经纪人会回答没有什么要消耗的。。因此,消费者将以固定间隔,无休止的循环进行永久轮询,并且什么也不做。只要生产者出现并开始抽取数据,消费者就将开始接收(和处理)数据。在更多涉及的用例中,如果特定主题的保留期已过,并且使用者尚未处理积压的订单,则可能会丢失数据。但是我认为这对您来说并不重要。