【译】Flink + Kafka 0.11端到端精确一次处理语义的实现
本文是翻译作品,作者是Piotr Nowojski和Michael Winters。前者是该方案的实现者。 原文地址是https://data-artisans.com/blog/end-to-end-exactly-once-processing-apache-flink-apache-kafka 2017年12月Apache Flink社区发布了1.4版本。该版本正式引入了一个里程碑式的功能:两阶段提交Sink,即TwoPhaseCommitSinkFunction。该SinkFunction提取并封装了两阶段提交协议中的公共逻辑,自此Flink搭配特定source和sink(特别是0.11版本Kafka)搭建精确一次处理语义(下称EOS)应用成为了可能。作为一个抽象类,TwoPhaseCommitSinkFunction提供了一个抽象层供用户自行实现特定方法来支持EOS。 用户可以阅读 Java文档 来学习如何使用TwoPhaseCommitSinkFunction,或者参考 Flink官网文档 来了解FlinkKafkaProducer011是如何支持EOS的,因为后者正是基于TwoPhaseCommitSinkFunction实现的。 本文将深入讨论一下Flink 1.4这个新特性以及其背后的设计思想。在本文中我们将: 1.