本次实战将要搭建3台kafka集群,3台服务器的ip分别是192.168.220.101,192.168.220.102,192.168.220.133
安装KAFKA
下载kafka:
官网http://kafka.apache.org/downloads下载相应版本的kafka,本集群使用版本为:kafka_2.12-2.3.0.tgz
分别上传到以上3台服务器。
安装:
直接解压即可 tar -zxvf kafka_2.12-2.3.0.tgz
配置server.properties:
首先编辑192.168.220.101服务器上的kafka的服务器配置文件:/usr/local/kafka_2.12-2.3.0/config/server.properties
broker.id=0 #集群中各个节点该值不能重复 listeners=PLAINTEXT://192.168.220.101:9092 #当前节点服务器的地址和端口 advertised.listeners=PLAINTEXT://192.168.220.101:9092 #当前节点服务器的地址和端口 log.dirs=/usr/local/kafka_2.12-2.3.0/logs #这个目录需要手动创建 zookeeper.connect=192.168.220.101:2181 #zk集群的地址,多个以逗号分隔 zookeeper.connection.timeout.ms=60000 #连接zk的超时时间,默认是6000,最好设置大一点,以免超时
再分别编辑192.168.220.102,192.168.220.133的kafka服务器配置文件server.properties,只需改动上面配置的前3项即可。
启动kafka
分别在3台服务器的kafka的中执行命令:./bin/kafka-server-start.sh config/server.properties
#备注”-daemon"在后台运行,不占用当前窗口
启动成功后,查看zk,可以看到ids对应我们设置的三个broker.id
[zk: localhost:2181(CONNECTED) ] ls /brokers/ids
[0, 1, 2]
查看其中的一个详情
[zk: localhost:2181(CONNECTED) 8] get /brokers/ids/1
{"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://192.168.220.102:9092"],"jmx_port":-1,"host":"192.168.220.102","timestamp":"1593329740027","port":9092,"version":4}
测试KAFKA
1、创建Topic
在192.168.220.101(Broker)上创建Tpoic:book,这里我们指定了3个分区,2个副本
[root@localhost bin]# ./kafka-topics.sh --create --zookeeper 192.168.220.101:2181 --topic book --partitions 3 --replication-factor 2
再在192.168.220.102(Broker)上创建Tpoic:user,这里我们指定了5个分区,2个副本
[root@localhost bin]# ./kafka-topics.sh --create --zookeeper 192.168.220.102:2181 --topic user --partitions 5 --replication-factor 2
Topic在一个broker上创建后也会同步到集群中另外两个Broker。
2、查看topic --list
可以在任意一台broker上查看,比如在192.168.220.133上查看集群的topic列表信息
[root@localhost bin]# ./kafka-topics.sh --bootstrap-server 192.168.220.133:9092 --list
__consumer_offsets
book
user
3.查看指定的topic详情 --describe --topic user
[root@localhost bin]# ./kafka-topics.sh --bootstrap-server 192.168.220.133:9092 --describe --topic user Topic:user PartitionCount:5 ReplicationFactor:2 Configs:segment.bytes=1073741824 Topic: user Partition: 0 Leader: 0 Replicas: 0,1 Isr: 0,1 Topic: user Partition: 1 Leader: 1 Replicas: 1,2 Isr: 1,2 Topic: user Partition: 2 Leader: 2 Replicas: 2,0 Isr: 2,0 Topic: user Partition: 3 Leader: 0 Replicas: 0,2 Isr: 0,2 Topic: user Partition: 4 Leader: 1 Replicas: 1,0 Isr: 1,0
Partition:0,1,2,3,4 数字代表user这个topic的分区编号
Leader:0,1,2 数字代表的是broker的id编号,也就是集群中的服务器编号
Replicas:0,1,2 数字代表的是broker的id编号,也就是集群中的服务器编号
Isr:0,1,2 数字代表的是broker的id编号,也就是集群中的服务器编号
具体分析如下:
Topic: user Partition: 0 Leader: 0 Replicas: 0,1 Isr: 0,1
表示的意思是user分区0有两个副本,分别在broker0和1上(Replicas:0,1),其中broker0上的副本是leader(Leader:0),那么broker1上的副本自然就是fllower,
所以在broker0和broker1上应该都会创建user-0(表示主题user的第0个分区)文件,分别代表分区0的leader和fllower副本。
去192.168.220.101,192.168.220.102上查看logs目录,确实都有user-0文件
192.168.220.101关于user主题的文件:
192.168.220.102关于user主题的文件:
为了深入理解这里的数字概念,再创建一个topic:it,指定5个分区,3个副本。
[root@localhost bin]# ./kafka-topics.sh --create --zookeeper 192.168.220.101:2181 --topic it --partitions 5 --replication-factor 3 Created topic it. [root@localhost bin]# ./kafka-topics.sh --bootstrap-server 192.168.220.102:9092 --describe --topic it Topic:it PartitionCount:5 ReplicationFactor:3 Configs:segment.bytes=1073741824 Topic: it Partition: 0 Leader: 0 Replicas: 0,2,1 Isr: 0,2,1 Topic: it Partition: 1 Leader: 1 Replicas: 1,0,2 Isr: 1,0,2 Topic: it Partition: 2 Leader: 2 Replicas: 2,1,0 Isr: 2,1,0 Topic: it Partition: 3 Leader: 0 Replicas: 0,1,2 Isr: 0,1,2 Topic: it Partition: 4 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0
可以看到it的分区0分配到了3个broker(0,2,1)上面。it的其他分区也都分别分配到了3个broker上了,因为副本数等于broker数,而且相同的副本不能分配到同一个broker上,所以只能这样分配。
注意:副本数不能大于broker数量,因为有个前提就是相同的副本不能分配在同一个broker上
4.启动生产者,准备发送消息
--broker-list 可以指定整个集群的所有ip,也可以只指定其中任意一个
--topic 指定要发送消息所属主题
[root@localhost bin]# ./kafka-console-producer.sh --broker-list 192.168.220.101:9092 --topic book
5.启动2个消费者,准备消费消息
[root@localhost bin]# ./kafka-console-consumer.sh --bootstrap-server 192.168.220.102:9092 --from-beginning --topic book
[root@localhost bin]# ./kafka-console-consumer.sh --bootstrap-server 192.168.220.133:9092 --from-beginning --topic book