我想在传统的消息队列配置中使用Kafka。那就是:
答:第1点意味着我认为我需要用auto.offset.reset
启动我的初始消费者,否则我会错过在消费者开始之前发送的消息。
第3点意味着我可以通过添加消费者来重新平衡。假设A点是正确的,我应该将哪个值用于auto.offset.reset = earliest
?
B:如果我设置auto.offset.reset = latest
,那么我会处理重复的邮件吗? (我知道重新平衡本身的行为可能导致重复的消息处理)。
C:或者我应该设置auto.offset.reset
?如果是这样,Kafka会确保处理所有消息吗?
D:这是否意味着我需要为不同时间开始的消费者提供不同的.txt
配置值?
我正在使用当前版本0.10.2.1。
答案 0 :(得分:1)
在Kafka中设置消费者有两个基本原则,Consumer
和Consumer Group
。但auto.offset.reset
的概念保持不变。
答:第1点意味着我认为我需要使用auto.offset.reset = earliest来启动我的初始消费者,否则我将错过在消费者开始之前发送的消息。
第3点意味着我可以通过添加消费者来重新平衡。假设A点是正确的,我应该将哪个值用于auto.offset.reset?
我认为您正在向同一组添加新的消费者。在这种情况下,您必须增强对主题的分区,否则新消费者将保持闲置状态。因为,主题上的一个分区只能由使用者组中的一个使用者使用。
如果新的消费者需要在消息开始之前使用添加到主题的消息,那么消费者组的设置应该是auto.offset.reset = earliest
。此配置仅在该特定分区没有提交的偏移量时才会播放(在重新平衡的情况下)。
B:如果我设置auto.offset.reset = earliest那么我会处理重复的消息吗? (我知道重新平衡本身的行为可能导致重复的消息处理)。
没有。在消费者重新平衡的情况下,它获取指定分区的最新提交偏移量。它在没有提交偏移的情况下使用auto.offset.reset = earliest
配置。
C:或者我应该设置auto.offset.reset = latest?如果是这样,Kafka会确保处理所有消息吗?
请阅读我对B点的评论。
我希望它有所帮助。
答案 1 :(得分:0)
auto.offset.reset
。它只是消费者群体第一次启动时,ZooKeeper缺少偏移量。例如,如果消费者组中的所有消费者都停留的时间超过主题保留期,则可能会发生超出范围的偏移。因此,通过适当地配置保留时间,您不会因此而看到超出范围的偏移。
如果您使用auto.offset.reset = earliest
,那么在没有初始偏移或超出范围偏移的情况下,您可能会重新处理消息。但是既然你必须应对重复无论如何的可能性(因为Kafka至少提供了一次语义),这不应该有任何不同。
如果您使用auto.offset.reset = latest
,那么在没有初始偏移或超出范围偏移的情况下,您可能无法处理某些消息。