首页 > 技术文章 > kafka集群操作

dawnlight 2021-10-31 22:32 原文

搭建kafka集群(三个broker)


  • 创建三个server.properties文件:

这里直接复制然后重命名原来的那个server.properties文件即可。

cp server.properties server1.properties
cp server.properties server2.properties

  • 然后修改以下参数:

原来server.properties的参数:

#server1.properties
broker.id=0
listeners=PLAINTEXT://127.0.0.1:9093
advertised.listeners=PLAINTEXT://127.0.0.1:9093
log.dir=/home/admin/apps/kafka/data/kafka-logs

另外两个配置文件的参数:

#server1.properties
broker.id=1
listeners=PLAINTEXT://127.0.0.1:9094
advertised.listeners=PLAINTEXT://127.0.0.1:9094
log.dir=/home/admin/apps/kafka/data/kafka-logs-1
#server1.properties
broker.id=2
listeners=PLAINTEXT://127.0.0.1:9095
advertised.listeners=PLAINTEXT://127.0.0.1:9095
log.dir=/home/admin/apps/kafka/data/kafka-logs-2

  • 在data目录中新建两个目录
cd data
mkdir kafka-logs-1
mkdir kafka-logs-2

  • 启动kafka集群

启动zookeeper

./zookeeper-server-start.sh ../config/zookeeper.properties

启动kafka

#以守护进程的方式启动
./kafka-server-start.sh -daemon ../config/server.properties
./kafka-server-start.sh -daemon ../config/server1.properties
./kafka-server-start.sh -daemon ../config/server2.properties

  • 查看kafka集群状态

因为kafka中的broker都是依靠zookeeper来维护,所以要查看kafka的broker,得通过zookeeper来查看。

首先要连接到zookeeper

./zookeeper-shell.sh 127.0.0.1:2182

查看broker的id

ls /brokers/ids

查询结果如下:
在这里插入图片描述
可以发现broker有三个id,刚好对应到我们创建的三个broker。
自此,kafka集群搭建成功!



副本的概念


在创建主题时,除了指明了主题的分区数以外,还指明了副本数,那么副本是⼀个什么概念呢?

下面我们创建有3个副本2个分区的topic:

./kafka-topics.sh --create --zookeeper 127.0.0.1:2182 --replication-factor 3 --partitions 2 --topic my-replicated-topic

副本是为了为主题中的分区创建多个备份,多个副本在kafka集群的多个broker中,会有⼀个副本作为leader,其他是follower。


查看topic情况:

./kafka-topics.sh --describe --zookeeper 127.0.0.1:2182 --topic my-replicated-topic

在这里插入图片描述
可以发现,我们刚刚创建的主题中包含2个分区和个副本。
0号分区的leader是1号副本,那么2号和0号副本都是follower。
0号分区的leader是2号副本,那么0号和1号副本都是follower。

剖析图:

在这里插入图片描述

  • leader:
    kafka的写和读的操作,都发⽣在leader上。leader负责把数据同步给follower。当leader挂了,经过主从选举,从多个follower中选举产⽣⼀个新的leader。

  • follower
    接收leader的同步的数据。

  • isr:
    可以同步和已同步的节点会被存⼊到isr集合中。这⾥有⼀个细节:如果isr中的节点性能较差,会被踢出isr集合。

  • 注意:
    集群中有多个broker,创建主题时可以指明主题有多个分区(把消息拆分到不同的分区中存储),可以为分区创建多个副本,不同的副本存放在不同的broker⾥。



集群消费


(1)向集群中发送消息

./kafka-console-producer.sh --broker-list 127.0.0.1:9093,127.0.0.1:9094,127.0.0.1:9095 --topic my-replicated-topic

(2)从集群中消费消息

./kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9093,127.0.0.1:9094,127.0.0.1:9095 --from-beginning --topic my-replicated-topic

(3)指定消费组来消费消息

./kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9093,127.0.0.1:9094,127.0.0.1:9095 --from-beginning --consumer-property group.id=testGroup1 --topic my-replicated-topic

运行结果:
在这里插入图片描述在这里插入图片描述

(4)分区分消费组的集群消费中的细节
在这里插入图片描述

  • ⼀个partition只能被⼀个消费组中的⼀个消费者消费,⽬的是为了保证消费的顺序性,但是多个partion的多个消费者消费的总的顺序性是得不到保证的,那怎么做到消费的总顺序性呢?
  • partition的数量决定了消费组中消费者的数量,建议同⼀个消费组中消费者的数量不要超过partition的数量,否则多的消费者消费不到消息。
  • 如果消费者挂了,那么会触发rebalance机制,会让其他消费者来消费该分区。

kafka知识点目录

1.Linux环境部署kafka
2.Win10环境部署kafka
3.docker部署kafka
4.kafka的简单使用
5.kafka消息的细节
6.kafka主题和分区的概念
7.kafka集群操作
8.kafka生产者实现细节
9.kafka消费者实现细节
10.kafka集群中的controller、rebalance、HW
11.kafka中的优化问题
12.Kafka-eagle监控平台
13.kafka错误汇总

推荐阅读