flink读取kafka数据

本文介绍了如何在生产环境中使用 Flink 从 Kafka 实时读取数据。首先,详细阐述了环境准备过程,包括启动 ZooKeeper 和 Kafka 服务,以及创建 Kafka Topic。接着,讲解了编码实现的步骤,包括引入 Flink-Kafka 依赖,并展示了核心代码片段,用于订阅 Kafka Topic 并实时处理接收到的数据。当通过 Kafka 生产者发送消息时,Flink 应用能即时地在控制台输出数据,实现了近实时的数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在实际生产环境中,经常需要使用flink读取外部的数据源作为数据的输入流,其中kafka就是重要的实时数据源,flink可以通过消费kafka指定的topic数据达到实时处理的目的,下面演示如何使用flink读取kafka的数据

环境准备

1、安装并启动zk服务

这个相信基本上都会了,就不再演示了

2、安装并启动kafka

本文为演示方便,直接使用docker快速启动一个kafka的容器,可以执行如下命令

docker run -d --name my_kafka \
-p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=ZK公网IP:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://ZK公网IP:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka

注意执行上面的命令之前,确保zk已经启动

### 如何使用FlinkKafka读取数据 为了实现FlinkKafka读取消息的功能,可以构建一个简单的流处理应用程序。此程序会设置Kafka作为源来接收消息,并通过Flink进行处理。 #### 创建项目依赖 首先,在Maven项目的`pom.xml`文件中加入必要的依赖项: ```xml <dependencies> <!-- Apache Flink dependencies --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java_2.12</artifactId> <version>${flink.version}</version> </dependency> <!-- Kafka connector for Flink --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-kafka_2.12</artifactId> <version>${flink.version}</version> </dependency> <!-- Other necessary dependencies here... --> </dependencies> ``` #### 编写代码逻辑 下面是一个完整的Java代码片段用于创建Flink作业并配置其从指定的Kafka主题读取字符串类型的记录[^1]。 ```java 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 java.util.Properties; public class FlinkKafkaIntegration { public static void main(String[] args) throws Exception { final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); Properties properties = new Properties(); properties.setProperty("bootstrap.servers", "localhost:9092"); properties.setProperty("group.id", "test"); FlinkKafkaConsumer<String> myConsumer = new FlinkKafkaConsumer<>( "your_topic_name", new SimpleStringSchema(), properties); // 添加source到执行环境中 env.addSource(myConsumer).print(); // 执行操作 env.execute("Flink Kafka Example"); } } ``` 这段代码定义了一个名为 `myConsumer` 的消费者实例,它订阅了特定的主题名称 `"your_topic_name"` 并指定了序列化模式为 `SimpleStringSchema()` 来解析接收到的消息。最后调用了 `.print()` 方法将每条消息输出至控制台以便观察结果[^2]。 #### 配置环境变量与启动服务 确保已经安装并运行了Kafka集群和服务端口开放正常工作。可以通过命令行工具验证Kafka状态和查看现有主题列表: ```bash kafka-topics.sh --zookeeper bigdata1:2181/kafka --list ``` 上述命令展示了如何列出ZooKeeper上注册的所有Kafka主题[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆风飞翔的小叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值