Apache Flink与Kafka Streams区别? - Gunnar

22-12-24 banq

Apache Flink与Kafka Stream都能实现流处理,但在一些重要方面有所不同。
下面是从用户的角度出发的,不涉及实现细节:

支持的流平台不同

  • 作为的Apache Kafka项目的一部分,Kafka Streams专门支持Kafka中的数据流处理。
  • ApacheFlink是平台无关的,可以让你处理Kafka、AWS Kinesis、Google Cloud Pub/Sub、RabbitMQ中的数据。


部署方式不同

  • Kafka Streams是一个库,你可以把它嵌入到你的Java(或更普遍的,基于JVM的)应用程序中。
  • Flink也可以像作为一个库使用,但更典型的是,它是作为一个工作者集群运行的,你把你的工作上传到这个集群。它配备了一个Web控制台,可供用户使用,可管理作业、仪表盘、REST API、自动扩展手段("反应模式")、Kubernetes运营商等。所有这些都有助于在prod中大规模地运行流处理作业,而对于Kafka Streams,你必须自己添加这样一个操作层。


接口/API

  • Kafka Streams是一个专门的Java API(实际上是两个:Streams + Processor API);
  • Flink提供了两个Java API(DataStream和Table),以及一个Python(PyFlink)和一个内置的SQL接口(Flink SQL)。后者是完全开源的,是Apache Flink项目本身的一部分,与Kafka生态上的ksqlDB不同。


批量处理与流式处理

  • Kafka Streams专注于无界数据流的有状态处理
  • 而Flink旨在为处理有界作业("批")和无界作业("流")提供一个统一的平台。


连接器集成

  • 源和sink连接器是Flink作业的一个核心要素,即它们与流处理逻辑部署在同一个集群中。
  • 使用Kafka Streams,连接器是通过Kafka Connect集群单独部署和操作的。