Kafka安装部署与Java调用(集群版)

Kafka-安装部署(集群版)

1、服务器环境

Linux版本:Centos7

机器数量:3台服务器

java环境:jdk1.8

安装包版本:kafka_2.11-0.11.0.2.tgz

kafka服务器名

IP

域名

kafka1

192.168.172.134

kafka1.sd.cn

kafka2

192.168.172.141

kafka2.sd.cn

kafka3

192.168.172.142

kafka3.sd.cn

2、增加host配置

vi /etc/hosts

/etc/init.d/network restart

https://img-blog.csdnimg.cn/20190303213653109.png

3、Zookeeper集群搭建

直接使用kafka自带的zookeeper建立zk集群

1、将安装包kafka_2.11-0.11.0.2.tgz上传到/opt 目录下

2、解压:tar -zxvf kafka_2.11-0.11.0.2.tar.gz

3、修改并进入目录:

mv /opt/ kafka_2.11-0.11.0.2/opt/kafka/

cd /opt/kafka/

4、创建zookeeper目录:mkdir zk_kfk_data

5、进入目录:cd /opt/kafka/config

6、修改zookeeper.properties文件:

 三台机器上的zookeeper.properties文件配置相同,data.Dir 为zk的数据目录,server.1、server.2、server.3 为集群信息。

2888端口号是zookeeper服务之间通信的端口

3888端口是zookeeper与其他应用程序通信的端口。

tickTime:CS通信心跳数

Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。

tickTime以毫秒为单位。

tickTime:该参数用来定义心跳的间隔时间,zookeeper的客户端和服务端之间也有和web开发里类似的session的概念,而zookeeper里最小的session过期时间就是tickTime的两倍。

initLimit:LF初始通信时限

集群中的follower服务器(F)与leader服务器(L)之间 初始连接 时能容忍的最多心跳数(tickTime的数量)

syncLimit:LF同步通信时限

集群中的follower服务器(F)与leader服务器(L)之间 请求和应答 之间能容忍的最多心跳数(tickTime的数量)

7、创建myid文件:进入/opt/kafka/zk_kfk_data目录,创建myid文件,将三台服务器上的myid文件分别写入1,2,3。myid是zookeeper集群用来发现彼此的标识,必须创建,且不能相同。

8、执行启动zookeeper命令:

/opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties

三台机器都执行启动命令,查看zookeeper的日志文件,没有报错就说明zookeeper集群启动成功了。

4、Kafka集群搭建

1、进入目录:cd /opt/kafka/

2、创建kafka日志数据目录:mkdir kafka-logs-1

3、进入目录:cd /opt/kafka/config

4、修改server.properties配置文件:

 

https://img-blog.csdnimg.cn/20190303214216601.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2VpZzE3OQ==,size_16,color_FFFFFF,t_70

https://img-blog.csdnimg.cn/20190303214342616.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2VpZzE3OQ==,size_16,color_FFFFFF,t_70  

修改参数如下:

参数名称

参数值

备注

broker.id

0

broker.id的值三个节点要配置不同的值,分别配置为0,1,2

advertised.host.name

kafka1.sd.cn

在hosts文件配置kafka1域名,另外两台分别为:kafka2.sd.cn,kafka3.sd.cn

advertised.port

9092

默认端口,不需要改

log.dirs

/opt/kafka/kafka-logs

Kafka日志数据目录

num.partitions

40

分区数,根据自行修改

log.retention.hours

24

日志保存时间

zookeeper.connect

kafka1.sd.cn:3181,kafka2.sd.cn:3181,kafka3.sd.cn:3181

zookeeper连接地址,多个以逗号隔开

5、 启动kafka集群:

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

三个节点均要启动;查看kafka的日志文件,启动无报错,即搭建成功。

5、测试Kafka集群

1、创建topic:test

/opt/kafka/bin/kafktopics.sh --create --zookeeper kafka1.sd.cn:3181,kafka2.sd.cn:3181,kafka3.sd.cn:3181 --replication-factor 1 --partitions 1 --topic test

2、列出已创建的topic列表

/opt/kafka/bin/kafka-topics.sh --list --zookeeper 192.168.50.104:3181

3、模拟客户端去发送消息

/opt/kafka/bin/kafka-console-producer.sh --broker-list kafka1.sd.cn:9092,kafka2.sd.cn:9092,kafka3.sd.cn:9092 --topic test

4、模拟客户端去接受消息

/opt/kafka/bin/kafka-console-consumer.sh --zookeeper kafka1.sd.cn:3181,kafka2.sd.cn:3181,kafka3.sd.cn:3181 --from-beginning --topic test

6、补充说明

Zookeeper集群节点数量为什么要奇数?

1. 防脑裂

zookeeper的选举策略也是需要半数以上的节点同意才能当选leader,如果是偶数节点可能导致票数相同的情况;在节点数量是奇数个的情况下, zookeeper集群总能对外提供服务(即使损失了一部分节点);如果节点数量是偶数个,会存在zookeeper集群不能用的可能性(脑裂成两个均等的子集群的时候)。

2. 容错

zookeeper集群一大特性是只要集群中半数以上的节点存活,集群就可以正常提供服务,而2n+1台和2n+2台机器的容灾能力相同,都是允许n台机器宕机。本着节约的宗旨,一般选择部署2n+1台机器

 

Kafka-Java调用(集群版)

1、配置文件-application.properties:

2、jar包坐标-pom.xml:

3、工具类:

4、测试类:

5、windows-hosts配置:

Kafka-命令(集群版)

1.启动zookeeper
sh /usr/local/zookeeper/bin/zkServer.sh start      #单独的zookeeper启动
/opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties     #kafka自带的zookeeper启动

2.启动Kafka
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties

3.创建一个话题
/opt/kafka/bin/kafka-topics.sh --create --zookeeper 192.168.50.104:3181 --replication-factor 1 --partitions 1 --topic test-topic
/opt/kafka/bin/kafka-topics.sh --create --zookeeper  kafka1.sd.cn:3181,kafka2.sd.cn:3181,kafka3.sd.cn:3181 --replication-factor 1 --partitions 1 --topic test-topic

#replication-factor:将任意一个分区复制到N个broker 上,这样如果一个broker 挂了,我们仍然可以从另一个broker 上获取到消息
#partitions:分区数量  

4.发送消息
/opt/kafka/bin/kafka-console-producer.sh --broker-list 192.168.50.104:9092 --topic test-topic
/opt/kafka/bin/kafka-console-producer.sh --broker-list kafka1.sd.cn:9092,kafka2.sd.cn:9092,kafka3.sd.cn:9092 --topic test-topic

5.消费消息
/opt/kafka/bin/kafka-console-consumer.sh --zookeeper 192.168.50.104:3181 --topic test-topic                        #实时消费
/opt/kafka/bin/kafka-console-consumer.sh --zookeeper 192.168.50.104:3181 --topic test-topic --from-beginning       #从头开始消费
/opt/kafka/bin/kafka-console-consumer.sh --zookeeper kafka1.sd.cn:3181,kafka2.sd.cn:3181,kafka3.sd.cn:3181 --topic test-topic       #实时消费

6.查看已创建topic列表
/opt/kafka/bin/kafka-topics.sh --list --zookeeper 192.168.50.104:3181

7.查看topic属性
/opt/kafka/bin/kafka-topics.sh --describe --zookeeper 192.168.50.104:3181 --topic test-topic

8.删除topic
/opt/kafka/bin/kafka-topics.sh --zookeeper 192.168.50.104:3181 --delete --topic test-del
 (1)登录zookeeper客户端:命令:/opt/kafka/bin/zookeeper-shell.sh 192.168.50.104:3181
 (2)找到topic所在的目录:ls /brokers/topics
 (3)找到要删除的topic,执行命令:rmr /brokers/topics/【topic name】即可,此时topic被彻底删除。
 
9.查看分组消费情况
/opt/kafka/bin/kafka-consumer-groups.sh --new-consumer --bootstrap-server 192.168.50.104:9092 --describe --group test-group

10.查看所有分组列表
/opt/kafka/bin/kafka-consumer-groups.sh --new-consumer --bootstrap-server 192.168.50.104:9092 --list

软件包以及Java调用工具类下载地址:https://download.csdn.net/download/qq_34281865/15506493
个人交流Q:772182648
以上是本人自己总结,并且在项目中实际用到的。新手一枚,不喜勿喷!

猜你喜欢

转载自blog.csdn.net/qq_34281865/article/details/114270800
今日推荐