我有一个风暴设置,可以从kafka主题中获取消息并处理并保留它们。 我想了解风暴如何在这种情况下保证消息处理
考虑以下情况: 我为风暴群集配置了多个主管+工作人员。 KafkaSpout正在阅读主题中的消息,然后传递这个螺栓。完成后螺栓会响起,喷嘴向前移动到下一条消息。
我有两名主管在运行 - 每个主管每人运行3名工人。 根据我的理解 - 每个主管的每个工作人员都能够处理消息。
因此,在任何给定时间,在风暴群集中并行处理6条消息。 如果第二条消息因工作人员关闭或由于主管关闭而失败,该怎么办? zookeeper已经指向消费者组的7消息。 在这种情况下,第二条消息将如何处理?
答案 0 :(得分:0)
我想有一些错过的理解。以下声明似乎是错误的:
=>鲸鱼喷水不是在等待痘痘;无论螺栓的处理速度如何,它都会以最大速度反复取出元组 - 只要Kafka中有新消息可用。 (或者您是否通过max.spout.pending
限制了飞行中的元组数量?)。因此,许多消息是并行处理的(即使只有#executors被赋予UDF - 许多其他消息都在内部Storm队列中缓冲)。
据我所知(但我不是100%肯定),KafkaSpout
“命令”传入的ack并且只有在所有连续的ack可用时才移动偏移量 - 即,消息7未被激活Kafka如果消息6的风暴确认还没有。因此,KafkaSpout
如果失败则可以重新发出消息6。重新称之为Storm不提供任何订购保证。