大家好,我是尚影嫣,一名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-logsserver1.properties
broker.id=1 <br/>
listeners=PLAINTEXT://192.168.65.60:9093 <br/>
log.dir=/usr/local/data/kafka-logs-1server2.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
通过查看主题信息,其中的要害数据:
- 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——正本
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 myreplicated-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.对于分区生产组消费者的细节
图中Kafka集群有两个broker,每个broker中有多个partition。一个partition只能被一个生产组里的某个消费者生产,从而保障生产程序。Kafka只在partition的范畴内保障音讯生产的部分程序性,不能在同一个topic中的多个partition中保障总的生产程序性。一个消费者能够生产多个partition。生产组中消费者的数量不能比一个topic中的partition数量多,否则多进去的消费者生产不到音讯。