Kafka消费者同步行为

时间:2017-01-06 02:59:46

标签: asynchronous apache-kafka kafka-consumer-api

我目前正在探索kafka作为一个简单问题的初学者。

  

有一个 Producer 将消息推送到一个主题,但会有   是 n 火花应用程序消费者的数量按摩数据   kafka并插入数据库(每个消费者插入到不同的   表)。

     

消费者是否有可能会失去同步(比如消费者的某些部分会在相当长的一段时间内停电),然后   一个或多个使用者不会处理消息并插入表   ?

     

假设代码始终正确,则不会出现异常   按摩数据。处理每条消息都很重要   只有一次。

我的问题是Kafka是否为我们处理这部分内容,或者我们是否必须编写其他代码以确保不会发生这种情况。

2 个答案:

答案 0 :(得分:0)

您可以对使用者进行分组(请参阅group.id配置),并且分组的使用者可以分割主题的分区。一旦消费者下降,该组中的另一个消费者将接管被删除的分区读取的分区。

但是,可能存在一些问题:当消费者读取分区时,它会向Kafka提交偏移量,如果消费者在处理接收数据之后但在提交偏移量之前丢失,则其他消费者将从最新的可用偏移开始读取。幸运的是,您可以管理如何提交偏移的策略(请参阅消费者的设置enable.auto.commitauto.offset.reset等)

Kafka and Spark Streaming guide提供了一些解释以及如何管理抵消的可能策略。

答案 1 :(得分:0)

通过设计,卡夫卡使生产者和消费者脱钩。消费者将尽可能快地阅读-消费者可以尽可能快地进行生产。

可以将消费者组织为“消费者组”,您可以进行设置,以便多个消费者可以从一个组中读取以及进行设置,以便单个消费者从其自己的组中读取。

如果您将1个消费者分为一组,则您(取决于您的确认策略)应该能够确保每条消息(每个消费者)仅被读取一次。

否则,如果您想从一个组中读取多个使用者-同样的事情-但消息会被n个使用者之一读取一次。