使用 Apache Flink 消费 Kafka 数据是一个常见的流处理场景。下面是一个实操案例,演示如何配置 Flink 从 Kafka 读取数据,并进行简单的处理。
- 环境准备
Kafka 集群:确保 Kafka 已经安装并运行。
Flink 集群:确保 Flink 已经安装并运行。
Java & Maven:确保安装了 JDK 和 Maven。 - 创建 Flink 项目
使用 Maven 创建一个新的 Flink 项目:
mvn archetype:generate \
-DarchetypeGroupId=org.apache.flink \
-DarchetypeArtifactId=flink-quickstart-java \
-DarchetypeVersion=1.13.0 \
-DgroupId=org.apache.flink \
-DartifactId=flink-kafka-consumer \
-Dversion=0.1 \
-Dpackage=org.apache.flink.kafkaconsumer
- 添加依赖
在 pom.xml 中添加 Kafka 连接器依赖:
<dependencies>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-kafka_2.12</artifactId>
<version>1.13.0</version>
</dependency>
<!-- 其他依赖省略 -->
</dependencies>
- 编写 Flink 程序
在 src/main/java/org/apache/flink/kafkaconsumer 目录下创建一个 Kafka 消费者类,例如 KafkaConsumerJob.java:
package org.apache.flink.kafkaconsumer;
import org.apache.flink.api.common.serialization.SimpleStringSchema;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.util.Collector;
import java.util.Properties;
public class KafkaConsumerJob {
public static void main(String[] args) throws Exception {
// 创建 Flink 流处理执行环境
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 配置 Kafka 消费者
Properties properties = new Properties();
properties.setProperty("bootstrap.servers", "localhost:9092");
properties.setProperty("group.id", "flink-consumer-group");
// 创建 Kafka 消费者
FlinkKafkaConsumer<String> kafkaConsumer = new FlinkKafkaConsumer<>(
"your-kafka-topic",
new SimpleStringSchema(),
properties);
// 添加 Kafka 消费者为数据源
DataStream<String> stream = env.addSource(kafkaConsumer);
// 简单的数据处理(将输入字符串拆分为单词)
DataStream<String> words = stream.flatMap(new FlatMapFunction<String, String>() {
@Override
public void flatMap(String value, Collector<String> out) {
for (String word : value.split(" ")) {
out.collect(word);
}
}
});
// 将处理后的数据打印到控制台
words.print();
// 启动作业
env.execute("Flink Kafka Consumer Job");
}
}
- 编译和运行
使用 Maven 编译项目:
mvn clean package
将生成的 jar 文件提交给 Flink 集群运行:
$FLINK_HOME/bin/flink run -c org.apache.flink.kafkaconsumer.KafkaConsumerJob target/flink-kafka-consumer-0.1.jar
- 验证结果
在 Kafka 中发送一些消息:
kafka-console-producer.sh --broker-list localhost:9092 --topic your-kafka-topic
在 Flink 集群的 Web UI 或终端上,可以看到 Flink 作业处理和输出的结果。