在这篇博客中,我们将了解什么是Kafka和Kafka Producer,包括使用Apache Beam的Kafka Producer的代码。
什么是Kafka?
Kafka是一个分布式数据流平台,所以它通常被用于高性能数据管道、流分析、数据集成和关键任务应用。
- 发布(写)和订阅(读)事件流,称为记录。
- 在主题内持久而可靠地存储记录流。
- 在事件发生时或回顾性地处理记录流。
此外,这些功能是以分布式的、高度可扩展的、容错的和安全的方式提供的。
什么是Kafka生产者?
Kafka生产者是负责向一个或多个主题发送数据流的发布者。简而言之,生产者向Kafka主题写入消息。
以下是Kafka的基本命令
- 创建主题。
- bash kafka-topics.sh -create -zookeeper localhost:2181 -replication-factor 1 -partitions 1 -topic test
- 列出所有主题。
- bash kafka-topics -list -zookeeper localhost:2181
- 启动一个消费者的命令。
- bash kafka-console-consumer -topic test -from-beginning -bootstrap-server localhost:9092
一个典型的Beam驱动程序的工作原理如下。
- 首先,创建一个管道对象并设置管道执行选项,包括管道运行器。
- 然后,为管道数据创建一个初始PCollection,可以使用IO的从外部存储和其他来源读取数据。
- 将PTransforms应用于每个PCollection。
- PTransforms可以改变、过滤、分组、分析或处理PCollection中的元素。
- 一个转换会创建一个新的输出PC集合,但不会修改输入集合。
- 使用IO将最终的、经过转换的PC集合写到一个外部源。
- 最后,使用指定的Pipeline Runner运行该管道。
让我们进入代码,在此假设Kafka设置已经完成,Kafka服务器也在机器上运行。
使用Apache Beam的Kafka Producer代码
import org.apache.beam.sdk.Pipeline;
import org.apache.beam.sdk.coders.StringUtf8Coder;
import org.apache.beam.sdk.io.kafka.KafkaIO;
import org.apache.beam.sdk.options.PipelineOptions;
import org.apache.beam.sdk.options.PipelineOptionsFactory;
import org.apache.beam.sdk.transforms.Create;
import org.apache.beam.sdk.values.PCollection;
import org.apache.kafka.common.serialization.StringSerializer;
public class KafkaProducer {
public static void main(String[] args) {
// Creating pipeline but without using options
Pipeline pipeline = Pipeline.create();
// Creating PCollection from the String which we want to pass as event in Kafka
PCollection pCollection = pipeline.apply(Create.of("Hello World"));
// Creating Kafka Producer using the KafkaIO and set the required configurations.
pCollection
.apply(KafkaIO.<Void, String>write()
.withBootstrapServers("localhost:9092")
.withTopic("test")
.withValueSerializer( StringSerializer.class).values());
//Here we are starting the pipeline
pipeline.run();
}
}
代码解释
- 在这段代码中,首先我们使用create()方法创建管道,没有任何选项。
- 其次,我们从一个字符串中创建PCollection,我们希望将其发布到Kafka主题中,输入可以由文件和其他来源获得。
- 之后,我们使用KafkaIO里面的apply()方法创建Kafka Producer,并设置所需的配置。
- 最后,我们使用run()方法启动管道。
以下是需要添加到pom.xml中的maven依赖项
<dependency>
<groupId>org.apache.beam</groupId>
<artifactId>beam-sdks-java-core</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>org.apache.beam</groupId>
<artifactId>beam-sdks-java-io-kafka</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>org.apache.beam</groupId>
<artifactId>beam-runners-direct-java</artifactId>
<version>2.10.0</version>
</dependency>