“Kafka 集群操作”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
第54行: 第54行:
 
两个 partition(分区)在 三个 broker 中都有:
 
两个 partition(分区)在 三个 broker 中都有:
 
[[文件:两个分区在三个Broker都存在.png|无|缩略图|1400x1400像素]]
 
[[文件:两个分区在三个Broker都存在.png|无|缩略图|1400x1400像素]]
 +
 +
 +
  
  
第61行: 第64行:
 
[[文件:副本的概念.png|无|缩略图|1400x1400像素]]
 
[[文件:副本的概念.png|无|缩略图|1400x1400像素]]
  
* leader
+
*leader
  
 
Kafka 的写和读的操作,都发生在 leader 上。leader 负责把数据同步给 follower。当 leader 挂了,经过主从选举,从多个 follower 中选举产生一个新的 leader
 
Kafka 的写和读的操作,都发生在 leader 上。leader 负责把数据同步给 follower。当 leader 挂了,经过主从选举,从多个 follower 中选举产生一个新的 leader
  
* follower
+
*follower
  
 
接收 leader 同步的数据
 
接收 leader 同步的数据
  
* isr
+
*isr
  
 
可以同步和已同步的节点会被存入到 isr 集合中。这里有一个细节:如果 isr 中的节点性能较差,会被踢出 isr 集合。
 
可以同步和已同步的节点会被存入到 isr 集合中。这里有一个细节:如果 isr 中的节点性能较差,会被踢出 isr 集合。
第78行: 第81行:
  
 
'''<big>集群中有多个 broker,创建主题时可以指明主题有多个 partition(分区)(把消息拆分到不同的分区中存储),可以为 partition(分区)创建多个 replica(副本),不同的 replica(副本)存放在不同的 broker 里</big>'''。
 
'''<big>集群中有多个 broker,创建主题时可以指明主题有多个 partition(分区)(把消息拆分到不同的分区中存储),可以为 partition(分区)创建多个 replica(副本),不同的 replica(副本)存放在不同的 broker 里</big>'''。
 +
 +
===3.关于集群消费===
 +
 +
*Kafka 集群消息的发送<syntaxhighlight lang="shell-session">
 +
[root@localhost bin]# ./kafka-console-producer.sh --broker-list 192.168.137.200:9092,192.168.137.200:9093,192.168.137.200:9094 --topic my-replicated-topic
 +
>java
 +
 +
</syntaxhighlight>
 +
*Kafka 集群消息的消费<syntaxhighlight lang="shell-session">
 +
[root@localhost bin]# ./kafka-console-consumer.sh --bootstrap-server 192.168.137.200:9092,192.168.137.200:9093,192.168.137.200:9094 --from-beginning --topic my-replicated-topic
 +
java
 +
 +
</syntaxhighlight>
 +
*Kafka 集群消息的消费组的消费<syntaxhighlight lang="shell-session">
 +
[root@localhost bin]# ./kafka-console-consumer.sh --bootstrap-server 192.168.137.200:9092,192.168.137.200:9093,192.168.137.200:9094 --from-beginning --consumer-property group.id=testGroup1 --topic my-replicated-topic
 +
java
 +
 +
</syntaxhighlight>
 +
*关于分区消费组消费消费者的细节
 +
 +
[[文件:集群消费.png|无|缩略图|1200x1200像素]]

2022年8月24日 (三) 21:21的版本

1.搭建 Kafka 集群(三个 broker)

  • 准备3个 server.properties 文件
    [root@localhost ~]# cd /usr/local/kafka/kafka_2.11-2.4.0/config/
    [root@localhost config]# cp server.properties server1.properties 
    [root@localhost config]# cp server.properties server2.properties
    
  • server.properties
    broker.id=0
    listeners=PLAINTEXT://192.168.137.200:9092
    log.dirs=/usr/local/kafka/data/kafka-logs
    
  • server1.properties
    broker.id=1
    listeners=PLAINTEXT://192.168.137.200:9093
    log.dirs=/usr/local/kafka/data/kafka-logs-1
    
  • server2.properties
    broker.id=2
    listeners=PLAINTEXT://192.168.137.200:9094
    log.dirs=/usr/local/kafka/data/kafka-logs-2
    
  • 启动
    [root@localhost bin]# ./kafka-server-start.sh -daemon ../config/server.properties
    [root@localhost bin]# ./kafka-server-start.sh -daemon ../config/server1.properties
    [root@localhost bin]# ./kafka-server-start.sh -daemon ../config/server2.properties
    
  • 搭建完成后通过查看 zk 中的 /brokers/ids 是否启动成功
    root@4ac6bd5bc9f6:/apache-zookeeper-3.8.0-bin/bin# ./zkCli.sh
    [zk: localhost:2181(CONNECTED) 0] ls /brokers/ids
    [0, 1, 2]
    

2.副本的概念

在创建 topic(主题)时除了可以指明 partition(分区)数,还可以指明 replica(副本)数:

[root@localhost bin]# ./kafka-topics.sh --create --zookeeper 192.168.137.200:2181 --replication-factor 3 --partitions 2 --topic my-replicated-topic
Created topic my-replicated-topic.


查看 topic(主题)状况:

[root@localhost bin]# ./kafka-topics.sh --describe --zookeeper 192.168.137.200:2181 --topic my-replicated-topic
Topic: my-replicated-topic	PartitionCount: 2	ReplicationFactor: 3	Configs: 
	Topic: my-replicated-topic	Partition: 0	Leader: 2	Replicas: 2,0,1	Isr: 2,0,1
	Topic: my-replicated-topic	Partition: 1	Leader: 0	Replicas: 0,1,2	Isr: 0,1,2

两个 partition(分区)在 三个 broker 中都有:

两个分区在三个Broker都存在.png



那么副本是一个什么概念呢?

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

副本的概念.png
  • leader

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

  • follower

接收 leader 同步的数据

  • isr

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


此时,broker、topic(主题)、partition(分区)、replica(副本)这些概念就全部展现了:

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

3.关于集群消费

  • Kafka 集群消息的发送
    [root@localhost bin]# ./kafka-console-producer.sh --broker-list 192.168.137.200:9092,192.168.137.200:9093,192.168.137.200:9094 --topic my-replicated-topic
    >java
    
  • Kafka 集群消息的消费
    [root@localhost bin]# ./kafka-console-consumer.sh --bootstrap-server 192.168.137.200:9092,192.168.137.200:9093,192.168.137.200:9094 --from-beginning --topic my-replicated-topic
    java
    
  • Kafka 集群消息的消费组的消费
    [root@localhost bin]# ./kafka-console-consumer.sh --bootstrap-server 192.168.137.200:9092,192.168.137.200:9093,192.168.137.200:9094 --from-beginning --consumer-property group.id=testGroup1 --topic my-replicated-topic
    java
    
  • 关于分区消费组消费消费者的细节
集群消费.png