大家好,我是尚影嫣🌷,一名Java后端程序媛。如果您喜欢我的文章,欢迎点赞➕关注❤️,让我们一起成为更好的我们~

Kafka集群及副本的概念

1.搭建kafka集群,3个broker

新建3个server.properties文件:

  • server.properties

    broker.id=0 <br/>
    listeners=PLAINTEXT://192.168.65.60:9092 <br/>
    log.dir=/usr/local/data/kafka-logs
  • server1.properties

    broker.id=1 <br/>
    listeners=PLAINTEXT://192.168.65.60:9093 <br/>
    log.dir=/usr/local/data/kafka-logs-1
  • server2.properties

    broker.id=2 <br/>
    listeners=PLAINTEXT://192.168.65.60:9094 <br/>
    log.dir=/usr/local/data/kafka-logs-2

启动3台服务器:

./kafka-server-start.sh -daemon ../config/server0.properties <br/>
./kafka-server-start.sh -daemon ../config/server1.properties <br/>
./kafka-server-start.sh -daemon ../config/server2.properties

搭建完后通过查看zk中的/brokers/ids ,检查是否启动成功。

2.副本的概念

副本是对分区的备份。在集群中,不同的副本会被部署在不同的broker上。创建1个主题,2个分区、3个副本,命令如下:

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

image.png

image.png
通过查看主题信息,其中的关键数据:

  • replicas:当前副本存在的broker节点;
  • leader:副本里的概念;
    每个partition都有⼀个broker作为leader。
    消息发送方根据副本的leader是在哪个broker上面,决定要把消息发给哪个broker。副本中的leader专门用来接收消息。
    接收到消息,其他follower通过poll的方式来同步数据。
  • follower:leader处理所有针对这个partition的读写请求,而follower被动复制leader,不提供读写(主要是为了保证多副本数据与消费的⼀致性),如果leader所在的broker挂掉了,那么就会进行新leader的选举。

通过kill掉leader后再查看主题情况:

kill掉leader <br/>

ps -aux | grep server.properties <br/>
kill 17631 <br/>

查看topic情况 <br/>

./kafka-topics.sh --describe --zookeeper 172.16.253.35:2181 --topic my-replicated-topic

  • isr:
    可以同步的broker节点和已同步的broker节点,存放在isr集合中。

3.broker、主题、分区、副本

kafka集群中由多个broker组成
一个broker中存放一个topic的不同partition——副本

image.png

4.kafka集群消息的发送

./kafka-console-producer.sh --broker-list 172.16.253.38:9092,172.16.253.38:9093,172.16.253.38:9094 --topic my-replicated-topic <br/>

kill掉leader <br/>

ps -aux | grep server.properties <br/>
kill 17631 <br/>

查看topic情况 <br/>

./kafka-topics.sh --describe --zookeeper 172.16.253.35:2181 --topic my￾replicated-topic

5.kafka集群消息的消费

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

6.关于分区消费组消费者的细节

image.png
图中Kafka集群有两个broker,每个broker中有多个partition。一个partition只能被一个消费组里的某个消费者消费,从而保证消费顺序。Kafka只在partition的范围内保证消息消费的局部顺序性,不能在同一个topic中的多个partition中保证总的消费顺序性。一个消费者可以消费多个partition。消费组中消费者的数量不能比一个topic中的partition数量多,否则多出来的消费者消费不到消息。

本文参与了思否技术征文,欢迎正在阅读的你也加入。

尚影嫣
1 声望1 粉丝