我的数据流是:
FTP - > NiFi - >卡夫卡 - > Spark Streaming - >卡夫卡
NiFi - > Kafka 主题有3个分区,我使用3个执行程序。 Spark Streaming作业使用直接API从Kafka读取数据。工作流程是:
JavaInputDStream<ConsumerRecord<String, byte[]>> consumerStream = KafkaUtils.createDirectStream(javaStreamingContext, LocationStrategies.PreferConsistent(),
ConsumerStrategies.<String, byte[]>Subscribe(CONSUME_TOPICS,
kafkaConsumeParams));
JavaDStream<KeyValue<String, byte[]>> messagesStream = consumerStream
.map(new Function<ConsumerRecord<String, byte[]>, KeyValue<String, byte[]>>() {
private static final long serialVersionUID = 1L;
@Override
public KeyValue<String, byte[]> call(ConsumerRecord<String, byte[]> kafkaRecord) throws Exception {
...
LOGGER.info("processing messages with key: " + key);
return new KeyValue<>(key, valueBytesStream.toByteArray());
}
});
messagesStream.foreachRDD(new VoidFunction<JavaRDD<KeyValue<String, byte[]>>>() {
public void call(JavaRDD<KeyValue<String, byte[]>> rdd) throws Exception {
rdd..foreach(new VoidFunction<KeyValue<String, byte[]>>() {
...
}
});
我观察到我消耗了55条消息,而生成了69条消息。 1434消费消息产生1438条消息。
在两种情况下工作正常:
在日志中处理带有密钥的消息:分别重复69次和1438次。我无法理解这种行为。有人可以对此有所了解吗?