实例讲解

Flink实战: 结合Kafka构建端到端的Exactly-Once处理程序

為{幸葍}努か 提交于 2020-01-07 07:05:22
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前言 在消息处理过程中,除了Flink程序本身的逻辑(operator),我们还需要和外部系统进行交互,例如本地磁盘文件,HDFS,Kafka,Mysql等。虽然Flink本身支持Exactly-Once语义,但是对于完整的数据处理系统来说,最终呈现出来的语义和外部系统是相关的。 我们先总览一下 Flink不同connector的消息传递语义 。 在Guarantees这一列,我们可以发现以下3种语义: at most once : 至多一次。可能导致消息丢失。 at least once : 至少一次。可能导致消息重复。 exactly once : 刚好一次。不丢失也不重复。 语义分析 我们结合 Kafka connector 来介绍这3中不同的语义,以及分析它是如何产生的。 Kafka Producer的语义 Producer的at-most-once和at-least-once语义主要由“retries”控制(在callback中实现异常重发也相当于retry)。 如果配置值是一个大于0的整数,Producer在收到error的callback后,Producer将重新发送消息。考虑这一种情况,收到消息后,Broker正确的保存了消息,只是在返回ack时出现broker故障或者网络异常。这时候