我有一个火花流应用程序,可以从kafka传输数据。我严重依赖于消息的顺序,因此只需在kafka主题中创建一个分区。
我正在以群集模式部署此作业。
我的问题是:由于我在群集模式下执行此操作,因此我可以让多个执行程序接收任务,并且在这种情况下我将丢失从kafka收到的消息的顺序。如果没有,火花如何保证订单?
答案 0 :(得分:0)
使用单个分区维护订单是正确的选择,以下是您可以尝试的其他一些事项:
spark.speculation - 如果设置为“true”,则执行推测执行 任务。这意味着如果一个或多个任务在a中运行缓慢 阶段,他们将重新启动。
干杯!
答案 1 :(得分:0)
分布式处理能力不会出现单个分区,因此请使用多个分区,我建议在每个消息(计数器或时间戳)上附加序列号。
如果消息中没有时间戳,则kafka流提供了一种提取消息时间戳的方法,您可以使用它来根据时间戳对事件进行排序,然后根据序列运行事件。