打个比喻,如果Flink是Lucene,那么Beam 就是Solr,把Flink 的API进行二次重写,简化了API,让大家使用更简单、更方便。此外,Beam提供了更多的数据源,这是Flink不能比的。当然,Flink 后期可能也会往这方面发展。
四.Apache Beam KafkaIO源码剖析 Apache Beam KafkaIO 对kafka-clients支持依赖情况KafkaIO是Kafka的API封装,主要负责Apache Kafka读取和写入消息。如果想使用KafkaIO,必须依赖beam-sdks-java-io-kafka ,KafkaIO 同时支持多个版本的Kafka客户端,使用时建议用高版本的或最新的Kafka 版本,因为使用KafkaIO的时候需要包含kafka-clients 的依赖版本。
Apache Beam KafkaIO 对各个kafka-clients 版本的支持情况如下表:
表4-1 KafkaIO 与kafka-clients 依赖关系表
Apache Beam V2.1.0版本之前源码中的pom文件都显式指定了特定的0.9.0.1版本支持,但是从V2.1.0版本和V2.1.1两个版本开始已经替换成了kafka-clients 的0.10.1.0 版本,并且源码中提示0.10.1.0 版本更安全。这是因为去年Kafka 0.10.1.0 之前的版本曝出了安全漏洞。在V2.2.0 以后的版本中,Beam对API做了调整和更新,对之前的两种版本都支持,不过需要在pom中引用的时候自己指定Kafka的版本。但是在Beam V2.5.0 和V2.6.0 版本,源码中添加了以下提示:
* <h3>Supported Kafka Client Versions</h3> * KafkaIO relies on <i>kafka-clients</i> for all its interactions with the Kafka cluster. * <i>kafka-clients</i> versions 0.10.1 and newer are supported at runtime. The older versions * 0.9.x - 0.10.0.0 are also supported, but are deprecated and likely be removed in near future. * Please ensure that the version included with the application is compatible with the version of * your Kafka cluster. Kafka client usually fails to initialize with a clear error message in * case of incompatibility. */也就说在这两个版本已经移除了对Kafka 客户端 0.10.1.0 以前版本的支持,旧版本还会支持,但是在以后不久就会删除。所以大家在使用的时候要注意版本的依赖关系和客户端的版本支持度。
如果想使用KafkaIO,pom 必须要引用,版本跟4-1表中的对应起来就可以了。
<dependency> <groupId>org.apache.beam</groupId> <artifactId>beam-sdks-java-io-kafka</artifactId> <version>...</version> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>a_recent_version</version> <scope>runtime</scope> </dependency> KafkaIO读写源码解析KafkaIO源码链接如下:
在KafkaIO里面最主要的两个方法是Kafka的读写方法。