Kafka与Flink结合使用

本文介绍了如何在本地和远程环境下将Kafka与Flink相结合。内容包括本地连接Kafka的步骤,如启动Zookeeper和Kafka集群,以及监控和操作Kafka主题。接着讨论了远程连接Kafka,涉及添加相关依赖,编写生产者和消费者程序,并解决版本兼容性问题。文中还提到了Flink的检查点机制和Kafka连接器的使用,以及通过Telnet检查网络连通性,调整Kafka配置文件以允许远程连接。

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

Kafka与Flink结合使用

本地连接kafka

首先可以先以本地模式来对kafka进行操作。
当我们在系统(可以是windows,尽量linux)上部署好了Zookeeper和kafka集群,值得注意的是单机也可以部署一个假集群来对实际生产环境做一个模拟(参考:https://blog.youkuaiyun.com/weixin_40366684/article/details/106258816),接下来我们可以启动zookeeper集群。

# bin/zkServer.sh start conf/zoo-1.cfg
# bin/zkServer.sh start conf/zoo-2.cfg
# bin/zkServer.sh start conf/zoo-3.cfg

​ 可以使用以下命令来监测zookeeper集群是否启动成功。

# bin/zkCli.sh

接下来启动kafka集群,kafka集群有两种启动方式,通常使用前台运行的方式,在这种方式如果是用的Xshell来远程控制,那么启动的标签页就不能关闭,只能保持挂着。

开启kafka:

前台运行:

bin/kafka-server-start.sh config/server.properties

后台运行:

nohup bin/kafka-server-start.sh config/server.properties > kafka-run.log 2>&1 &

在这里插入图片描述

当kafka集群启动完毕,可以通过以下命令来对对应主题进行操作。

创建kafka主题:

bin/kafka-topics.sh --create --zookeeper 10.45.xx.xx:2191 --replication-factor 1 --partitions 1 --topic test

 

显示kafka所有主题:

bin/kafka-topics.sh -list -zookeeper 10.45.xx.xx:2191

 

创建kafka生产者:

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

 

创建kafka消费者:

bin/kafka-console-consumer.sh --zookeeper 10.45.xx.xx:2191 --topic test --from-beginning
上面是老版本的使用方式 在最新版本的kafka中取消了这个命令使用以下命令:
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
 

解释:

--zookeeper:后面接的是你配置的zookeeper地址

--broker-list:默认端口为9092.可自行更改

在这里插入图片描述

远程连接kafka

我们想要远程连接,最简单的功能就是生产者和消费者。

首先是在我们的maven项目中添加依赖,其实就是下面这个2.11为kafka的版本,1.10.0为Flink的版本 ,

		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-connector-kafka_2.11</artifactId>
			<version>1.10.0</version>
		</dependency>

以Apache 的Flink训练项目的完整依赖为例:

<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<slf4j.version>1.7.19</slf4j.version>
		<flink.version>1.10.0</flink.version>
		<scala.binary.version>2.12</scala.binary.version>
		<junit.version>4.12</junit.version>
		<assertj.version>3.11.1</assertj.version>
	</properties>

	<dependencies>
		<!-- 解决测试报错-->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-nop</artifactId>
			<version>1.7.2</version>
		</dependency>

		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-java</artifactId>
			<version>${flink.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-clients_${scala.binary.version}</artifactId>
			<version>${flink.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-scala_${scala.binary.version}</artifactId>
			<version>${flink.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
			<version>${flink.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-streaming-scala_${scala.binary.version}</artifactId>
			<version>${flink.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-runtime-web_${scala.binary.version}</artifactId>
			<version>${flink.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-cep_${scala.binary.version}</
### KafkaFlink的集成 #### 集成概述 Apache Kafka和Apache Flink都是处理大规模数据流的强大工具。Kafka作为分布式事件流平台,负责高效可靠的消息传递;而Flink则专注于实时数据分析和复杂事件处理。两者结合能够实现高性能、低延迟的大规模数据流水线构建。 #### 关键技术点 - **消息传递机制** Kafka通过其主题(Topic)概念来组织数据流动方向,允许生产者(Producer)向特定Topic发布记录,并让多个消费者(Consumer)订阅这些Topic以接收更新[^1]。 - **实时计算框架** Flink可以从各种源头摄取数据并执行连续查询,在此过程中支持窗口聚合、状态管理等功能。当Kafka配合工作时,它能直接连接至后者提供的Topics来进行增量式的ETL作业[^2]。 #### 实现方式 为了使二者协同运作,通常会创建一个名为`KafkaMessageStreaming`的应用程序实例,该应用接受来自命令行输入的目标topic名称以及目标输出位置作为参数配置项[^3]: ```java public class KafkaMessageStreaming { public static void main(String[] args) throws Exception { final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); Properties properties = new Properties(); properties.setProperty("bootstrap.servers", "localhost:9092"); DataStream<String> stream = env.addSource(new FlinkKafkaConsumer<>("test-topic", new SimpleStringSchema(), properties)); // 进行业务逻辑处理... env.execute("Flink Streaming from Kafka Example"); } } ``` 上述代码片段展示了如何利用Java编写一段简单的Flink程序,用以监听指定Kafka Topic中的新条目,并对其进行进一步的操作(此处省略具体业务逻辑)。值得注意的是,在实际部署前还需要编译打包整个项目,这可通过Maven完成相应任务[^5]。 #### 应用场景举例 假设有一个监控系统需要定期收集服务器性能指标并向管理员报告异常情况,则可以采用如下架构设计: - 使用Kafka作为中介层保存原始日志; - 利用Flink周期性地扫描相关Topic内容,提取有用信息如CPU利用率、磁盘I/O速率等; - 将分析后的结论存入数据库供后续查看或触发警报通知[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值