0%

kafka

启动zokeeper

进入zokeeper的bin目录

1
cd /usr/local/zookeeper/apache-zookeeper-3.8.0-bin/bin/

开启zookeeper集群

1
./zkCli.sh -server 192.168.79.128:2181,192.168.79.128:2182,192.168.79.128:2183,192.168.79.128:2184

启动kafka服务器

进入kafka的bin目录

1
cd /usr/local/kafka/kafka_2.11-2.4.1/bin/

启动kafka

1
./kafka-server-start.sh -daemon ../config/server.properties

检查是否启动成功

1
ps -aux|grep server.properties

创建topic

通过kafka命令创建一个topic

1
./kafka-topics.sh --create --zookeeper 192.168.79.128:2181 --replication-factor 1 --partitions 1 --topic test

查看zk中所有topic

1
./kafka-topics.sh --list --zookeeper 192.168.79.128:2181

发送消息

生产者发送消息

1
./kafka-console-producer.sh --broker-list 192.168.79.129:9092 --topic test

接收消息

消费者接收消息

  • 方式一:从最后一条消息的偏移量+1开始消费
1
./kafka-console-consumer.sh --bootstrap-server 192.168.79.129:9092 --topic test
  • 方式二:从头开始消费
1
./kafka-console-consumer.sh --bootstrap-server 192.168.79.129:9092 --from-beginning --topic test

单播消息

两个消费者在同一个组

1
./kafka-console-consumer.sh --bootstrap-server 192.168.79.129:9092 --consumer-property group.id=testGroup --topic test

如果多个消费者在同一个消费者组,那么只有一个消费者能收到订阅的topic中的消息

多播消息

两个消费者在不同组

1
./kafka-console-consumer.sh --bootstrap-server 192.168.79.129:9092 --consumer-property group.id=testGroup --topic test
1
./kafka-console-consumer.sh --bootstrap-server 192.168.79.129:9092 --consumer-property group.id=testGroup1 --topic test

可以同时收到消息

查看消费者组

查看有哪些消费者组

1
./kafka-consumer-groups.sh --bootstrap-server 192.168.79.129:9092--topic test

查看某个组的具体信息

1
./kafka-consumer-groups.sh --bootstrap-server 192.168.79.129:9092 --describe --group testGroup

topic和patition

topic

kafka中的topic是一个逻辑概念,通过topic对消息进行分类,不同的topic会被订阅该topic的消费者消费。

如果消息非常多,因为消息是会被保存在log日志中,为了解决文件过大的问题,kafka提出了patition的概念。

partition

通过partition将topic的消息分区存储

  • 解决了log文件过大的问题

  • 提高生产者和消费者的吞吐量,读和写可以在多个分区同时进行

创建多分区topic

1
./kafka-topics.sh --create --zookeeper 192.168.79.128:2181 --replication-factor 1 --partitions 2 --topic test1

搭建kafka集群

1
2
3
./kafka-server-start.sh -daemon ../config/server.properties
./kafka-server-start.sh -daemon ../config/server1.properties
./kafka-server-start.sh -daemon ../config/server2.properties

副本

一个主题,两个分区,三个副本

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

查看topic

1
./kafka-topics.sh --describe --zookeeper 192.168.79.128:2181 --topic my-replicated-topicmy-replicated-topic

20220322152036

副本时为分区建立的副本,一个leader其余是follower

读和写都发生在leader上,leader挂了从follower中选举产生新leader

follower接收leader的同步数据

20220322153205

集群发消息

1
./kafka-console-producer.sh --broker-list 192.168.79.129:9092,192.168.79.129:9093,192.168.79.129:9094 --topic my-replicated-topic

集群收消息

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

分区分消费组的集群消费

20220322160204

一个partition最多被一个consumer消费(保证消费的顺序),一个consumer可以消费多个partition。

消费者组中consumer的数量不能比patition的数量多,不然多出来的consumer没有patition消费。

Welcome to my other publishing channels