我正在使用火花流,并且从Kafka中读取流。阅读此流后,我将其添加到hazelcast地图。
问题是,我需要在从Kafka中读取流后立即从地图中过滤值。
我正在使用以下代码来并行化地图值。
List<MyCompObj> list = CacheManager.getInstance().getMyMap().values().stream().collect(Collectors.toList());
JavaRDD<MyCompObj> myObjRDD = sparkContext.parallelize(list);
但是按照这种逻辑,我在另一个JavaInputDStream.foreachRDD中使用JavaRDD,这会导致序列化问题。
第一个问题是,如何通过事件驱动来运行我的Spark作业?
另一方面,我只想对预定的火花作业发表一些意见。 安排火花作业在特定时间执行它的最佳实践是什么?
答案 0 :(得分:4)
您是否考虑过Hazelcast Jet?这是Hazelcast构建的流引擎。从卡夫卡不断向Hazelcast传输数据的容错方式是面包和黄油,请参阅code sample
Jet与嵌入式Hazelcast打包在一起,为您简化了体系结构。
答案 1 :(得分:0)
我通过将流处理和批处理分为两个部分来解决了我的问题。
我正在使用石英和SparkLauncher来触发新工作(example)