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}</