kafka使用者同步行为

xuo3flqw  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(271)

我目前正在探索Kafka作为一个简单的问题初学者。
将有一个生产者将消息推送到一个主题,但spark应用程序将有n个消费者从kafka中按摩数据并插入数据库(每个消费者插入不同的表)。
是否存在这样一种可能性:消费者将失去同步(比如消费者的某个部分下降了相当长的一段时间),然后一个或多个消费者将不会处理消息并插入表?
假设代码总是正确的,在处理数据时不会出现异常。重要的是,每条消息只处理一次。
我的问题是,Kafka是为我们处理这一部分,还是我们必须写一些其他的代码,以确保这不会发生。

6l7fqoea

6l7fqoea1#

Kafka的设计使生产者和消费者脱钩。消费者会尽可能快地阅读,而消费者也会尽可能快地生产。
消费者可以被组织成“消费者组”,您可以对其进行设置,以便多个消费者可以从单个组中进行阅读,也可以对其进行设置,以便单个消费者可以从其自己的组中进行阅读。
如果您有1个消费者对1个组,您(取决于您的确认策略)应该能够确保每个消息只读取一次(每个消费者)。
否则,如果您希望多个使用者从一个组中读取消息(这是同一件事),但消息由n个使用者中的一个读取一次。

41ik7eoe

41ik7eoe2#

您可以对消费者进行分组(请参见 group.id 配置)和分组的使用者在它们之间分割主题的分区。一旦某个使用者删除,组中的另一个使用者将接管被删除的使用者读取的分区。
但是,可能存在一些问题:当使用者读取分区时,它会将偏移量提交回kafka;如果使用者在处理接收到的数据后但在提交偏移量之前删除分区,则其他使用者将从最新可用的偏移量开始读取。幸运的是,您可以管理如何提交偏移量的策略(请参阅使用者的设置) enable.auto.commit , auto.offset.reset 等)
kafka和spark流媒体指南提供了一些关于如何管理偏移的解释和可能的策略。

相关问题