Я использую Spark для использования данных из Кафки и сохранения их в Кассандре. Моя программа написана на Java. Я использую spark-streaming-kafka_2.10:1.6.2
lib для выполнения этого. Мой код:
SparkConf sparkConf = new SparkConf().setAppName("name");
JavaStreamingContext jssc = new JavaStreamingContext(sparkConf, new Duration(2000));
Map<String,String> kafkaParams = new HashMap<>();
kafkaParams.put("zookeeper.connect", "127.0.0.1");
kafkaParams.put("group.id", App.GROUP);
JavaPairReceiverInputDStream<String, EventLog> messages =
KafkaUtils.createStream(jssc, String.class, EventLog.class, StringDecoder.class, EventLogDecoder.class,
kafkaParams, topicMap, StorageLevel.MEMORY_AND_DISK_SER_2());
JavaDStream<EventLog> lines = messages.map(new Function<Tuple2<String, EventLog>, EventLog>() {
@Override
public EventLog call(Tuple2<String, EventLog> tuple2) {
return tuple2._2();
}
});
lines.foreachRDD(rdd -> {
javaFunctions(rdd).writerBuilder("test", "event_log", mapToRow(EventLog.class)).saveToCassandra();
});
jssc.start();
В моей таблице Cassandra event_log
имеется столбец с именем offsetid
для хранения идентификатора смещения потока. Как получить идентификатор смещения до тех пор, пока этот поток не прочитает поток Кафки и не сохранит его в Кассандре?
После сохранения в Cassandra я хочу использовать последний идентификатор смещения, который будет использоваться, когда Spark снова запустится. Как это сделать?