【发布时间】:2022-02-19 00:25:26
【问题描述】:
我正在构建一个 Spark Streaming 程序,如果程序无法处理该消息,我希望它读取某些消息并将它们作为“未读”返回到主题。
我的意图是程序最终会再次读取消息并尝试处理它。
这可能吗?
【问题讨论】:
我正在构建一个 Spark Streaming 程序,如果程序无法处理该消息,我希望它读取某些消息并将它们作为“未读”返回到主题。
我的意图是程序最终会再次读取消息并尝试处理它。
这可能吗?
【问题讨论】:
如果您将记录“返回”到原始主题,它将被附加到主题的末尾,因此会在下一次投票时再次使用。
这将导致无限的消耗循环(直到将记录放回的任何条件不再为真)
您所要求的似乎是一个“死信队列”,它是用不同的主题实现的,而不是原来的。至于如何在 Spark 中处理它,您可能需要维护一些 Try 对象(Scala)或其他布尔类型,以了解特定事件是否已成功处理;然后 filter 在写入任何下游系统之前将其输出。
例如具有此架构的数据框,您将在生成之前过滤/删除第三列
topic - string
value - bytes
hasError - boolean
【讨论】:
没有。如果您想到 Kafka 偏移,这是不可能的。
【讨论】: