Spark Executors的消息顺序

时间:2017-09-18 16:42:51

标签: apache-spark apache-kafka spark-streaming

我有一个火花流应用程序,可以从kafka传输数据。我严重依赖于消息的顺序,因此只需在kafka主题中创建一个分区。

我正在以群集模式部署此作业。

我的问题是:由于我在群集模式下执行此操作,因此我可以让多个执行程序接收任务,并且在这种情况下我将丢失从kafka收到的消息的顺序。如果没有,火花如何保证订单?

2 个答案:

答案 0 :(得分:0)

使用单个分区维护订单是正确的选择,以下是您可以尝试的其他一些事项:

  1. 关闭推测执行
  2.   

    spark.speculation - 如果设置为“true”,则执行推测执行   任务。这意味着如果一个或多个任务在a中运行缓慢   阶段,他们将重新启动。

    1. 调整批次间隔/大小,以便他们可以完成处理而不会有任何延迟。
    2. 干杯!

答案 1 :(得分:0)

分布式处理能力不会出现单个分区,因此请使用多个分区,我建议在每个消息(计数器或时间戳)上附加序列号。
如果消息中没有时间戳,则kafka流提供了一种提取消息时间戳的方法,您可以使用它来根据时间戳对事件进行排序,然后根据序列运行事件。

请参阅how to extract timestamp from kafka message.

上的答案