启动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 | ./kafka-server-start.sh -daemon ../config/server.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 |
副本时为分区建立的副本,一个leader其余是follower
读和写都发生在leader上,leader挂了从follower中选举产生新leader
follower接收leader的同步数据
集群发消息
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 |
分区分消费组的集群消费
一个partition最多被一个consumer消费(保证消费的顺序),一个consumer可以消费多个partition。
消费者组中consumer的数量不能比patition的数量多,不然多出来的consumer没有patition消费。