Apache flink 在本地执行模式下停止/启动Kafka消费者/生产者流
设置:Apache flink 在本地执行模式下停止/启动Kafka消费者/生产者流,apache-flink,Apache Flink,设置: 爪哇8 Flink 1.2(Mac OSX) 卡夫卡0.10.0(VirtualBox/Ubuntu) FlinkKafkaConsumer010 FlinkKafkaProducer010 创建了一个简单的示例程序,以使用来自一个卡夫卡主题的1M消息并生成到另一个主题-以本地执行模式运行。这两个主题都有32个分区 当我让它从头到尾运行时,它会消耗并生成所有消息。如果在完成之前启动然后停止(SIGINT),然后重新启动,则生产者仅接收原始1M消息的子集 我已经为消费者确认了我的补偿,
- 爪哇8
- Flink 1.2(Mac OSX)
- 卡夫卡0.10.0(VirtualBox/Ubuntu)
- FlinkKafkaConsumer010
- FlinkKafkaProducer010
final StreamExecutionEnvironment env =
StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(32);
env.enableCheckpointing(1000L, CheckpointingMode.EXACTLY_ONCE);
--
在本地执行模式下,这是预期的吗?我是否需要启用保存点来停止和重新启动流作业?出现这种情况时,生产者似乎没有提交所有消息
提前谢谢 首先,在后续运行中,它只接收消息的子集,因为
FlinkKafkaConsumer
使用Kafka中提交的偏移量作为起始位置。目前,在发行版中(截至目前1.2.0
为止)避免这种情况的唯一方法是始终分配一个新的group.id
。在下一个版本中,将有以下新选项:
作为旁注,还请注意,卡夫卡中的承诺补偿根本不用于Flink中的一次处理保证。Flink仅依赖于检查点偏移量。有关这方面的更多详细信息,请参见上面链接中的Flink Kafka connector文档
producer.setFlushOnCheckpoint(true);
producer.setLogFailuresOnly(false);