风暴(具有多个工作节点)如何在从卡夫卡主题读取时保证消息处理
How does storm (with multiple worker nodes) guarantee message processing while reading from a kafka topic
我有一个风暴设置,它从 kafka 主题中获取消息并处理并保存它们。
我想了解storm在这种情况下如何保证消息处理
考虑以下场景:
我为一个风暴集群配置了多个主管+工人。
KafkaSpout 正在从主题中读取消息,然后传递一个螺栓。 Bolt 在完成时确认,Spout 向前移动到下一条消息。
我有 2 位主管 运行 - 每一位都是 运行 3 名工人。
据我了解-每个主管的每个工作人员都能够处理一条消息。
因此,在任何给定时间,Storm 集群中都会并行处理 6 条消息。
如果第二条消息由于工作人员关闭或主管关闭而失败怎么办。
动物园管理员已经指向消费者组的 7 消息。
在这种情况下,第二条消息将如何处理?
估计是理解有误。以下声明似乎是错误的:
- 螺栓在完成时确认,喷口向前移动到下一条消息。
- 在任何给定时间,6 条消息正在风暴集群中并行处理
=> 一个 spout 不是在等待 acks;无论螺栓的处理速度如何,它都会以最大速度再次获取元组 over-and-over——只要 Kafka 中有新消息可用。 (或者您是否通过 max.spout.pending
限制了飞行中的元组数量?)。因此,许多消息是并行处理的(即使只有 #executors 被赋予 UDF——许多其他消息被缓冲在内部 Storm 队列中)。
据我所知(但我不是 100% 确定),KafkaSpout
"orders" 传入的 ack 并且只有在所有连续的 ack 都可用时才移动偏移量——即消息 7如果消息 6 的 Storm ack 还不存在,则不会向 Kafka 确认。因此,如果失败,KafkaSpout
可以 re-emit 消息 6。 Re-call Storm 不提供任何顺序保证。
我有一个风暴设置,它从 kafka 主题中获取消息并处理并保存它们。 我想了解storm在这种情况下如何保证消息处理
考虑以下场景: 我为一个风暴集群配置了多个主管+工人。 KafkaSpout 正在从主题中读取消息,然后传递一个螺栓。 Bolt 在完成时确认,Spout 向前移动到下一条消息。
我有 2 位主管 运行 - 每一位都是 运行 3 名工人。 据我了解-每个主管的每个工作人员都能够处理一条消息。
因此,在任何给定时间,Storm 集群中都会并行处理 6 条消息。 如果第二条消息由于工作人员关闭或主管关闭而失败怎么办。 动物园管理员已经指向消费者组的 7 消息。 在这种情况下,第二条消息将如何处理?
估计是理解有误。以下声明似乎是错误的:
- 螺栓在完成时确认,喷口向前移动到下一条消息。
- 在任何给定时间,6 条消息正在风暴集群中并行处理
=> 一个 spout 不是在等待 acks;无论螺栓的处理速度如何,它都会以最大速度再次获取元组 over-and-over——只要 Kafka 中有新消息可用。 (或者您是否通过 max.spout.pending
限制了飞行中的元组数量?)。因此,许多消息是并行处理的(即使只有 #executors 被赋予 UDF——许多其他消息被缓冲在内部 Storm 队列中)。
据我所知(但我不是 100% 确定),KafkaSpout
"orders" 传入的 ack 并且只有在所有连续的 ack 都可用时才移动偏移量——即消息 7如果消息 6 的 Storm ack 还不存在,则不会向 Kafka 确认。因此,如果失败,KafkaSpout
可以 re-emit 消息 6。 Re-call Storm 不提供任何顺序保证。