Apache spark Spark Direct Stream卡夫卡事件顺序

Apache spark Spark Direct Stream卡夫卡事件顺序,apache-spark,apache-kafka,hbase,streaming,Apache Spark,Apache Kafka,Hbase,Streaming,关于使用Spark Direct Streaming(Spark 1.6)从保存在HBase中的Kafka 0.9中读取数据,我有一个问题 我正在尝试更新从Kafka收到的HBase表中的特定行键,我需要确保事件的顺序保持不变(在t0接收到的数据在t1接收到数据之前肯定会保存在HBase中) 行键表示UUID,它也是Kafka中消息的键,因此在Kafka级别,我确信与特定UUID对应的事件在分区级别排序 当我开始使用Spark阅读时,我的问题就开始了 使用直接流方法,每个执行器将从一个分区读取数

关于使用Spark Direct Streaming(Spark 1.6)从保存在HBase中的Kafka 0.9中读取数据,我有一个问题

我正在尝试更新从Kafka收到的HBase表中的特定行键,我需要确保事件的顺序保持不变(在t0接收到的数据在t1接收到数据之前肯定会保存在HBase中)

行键表示UUID,它也是Kafka中消息的键,因此在Kafka级别,我确信与特定UUID对应的事件在分区级别排序

当我开始使用Spark阅读时,我的问题就开始了

使用直接流方法,每个执行器将从一个分区读取数据。我没有对数据进行任何洗牌(只是解析和保存),因此我的事件不会在RDD中弄乱,但我担心当执行器读取分区时,它不会保持顺序,因此在保存它们时,HBase中的数据将不正确

如何确保顺序保持在执行器级别,特别是如果我在一个执行器中使用多个内核(据我所知,这会导致多个线程)

我想我也可以使用1个内核,如果这解决了问题,并通过关闭推测性执行,启用火花回压优化,并将executor上的最大重试次数保持为1

我还考虑过使用Kafka偏移量在spark分区级别实现事件排序

有什么建议吗


提前多谢

如果您能展示您尝试过的代码和任何特定的错误响应,您的问题将更容易回答。Spark从不保证数据的顺序。它只保证它的处理。为了维护数据的顺序,您必须使用无状态或有状态的ops来确保自己的数据。@JECarterII代码与此无关。我没有收到任何错误…而且目前,在prod环境中,重叠事件的场景对我来说很难测试。如果测试太难,你将猜测无法测量的行为。考虑如何退一步或改进日志记录或测试以缩小调查范围,这可能是好的。正如@himanshuIIITian所建议的,你可能还需要检查你对将要发生什么和什么是可能的基本假设。