一、概念
1. kafka主要由Producer、KafkaCluster、Consumer三部分构成
2. KafkaCluster一般由多个服务器组成(至少需要2N+1,N>0),每个服务器有一个唯一的broker.id
,不允许重复
3. 一个KafkaCluster分为多个Topic,可以分布在不同的服务器上,每一个Topic会有多个Partation
4. Producer和Consumer面向的都是一个Topic
5. 每一个Topic的众多Partition 中,会有一个leader以及多个follower,Producer和Consumer永远是与Topic的leader Partition 交流,当leader Partition 挂掉以后,其他follower Partition 才有机会成为leader Partition ,(Replication是对leader和follower的总称)
6. 在kafka中默认Replication副本的最大数量是10个,且Replication副本的数量不能大于Broker的数量,follower和leader绝对是在不同的机器,同一机器对同一个分区也只可能存放一个Replication副本(包括自己)
7. Consumer可以分为多个Group,即一个Group可以有多个Consumer,但一个Consumer只能消费一个Partition
8. 真正存放Message的是Partition ,Partition 是一个有序的队列,里面存放的每一个Message都会被分配一个有序的 Id(Offset)
9. Consumer消费Message,需要提前知道Message在哪一个Topic的哪一个Partition 的Offset是多少才能消费
二、安装
前情提要
- 除了Producer、KafkaCluster、Consumer三部分,一个完整的消息链路还需要Zookeeper的参与,负责监控整个KafkaCluster,比如每个broker的上下线信息以及多个Partition 中谁是Leader等
- 在
Kafka 2.8.0
之前需要单独安装启动Zookeeper,之后Zookeeper成为可选项
2. 修改zoo.cfg,并保存
dataDir=/tmp/zookeeper
(必修)clientPort=2181
(可修)
3. 下载上传解压kafka,观察目录及文件
/bin
kafka-console-producer.sh
kafka-topics.sh
kafka-console-consumer.sh
kafka-server-start.sh
kafka-server-stop.sh
/config
producer.properties
server.properties
consumer.properties
![在这里插入图片描述](https://img-blog.csdnimg.cn/0f17d3e2ac8a464b9e6e75114721b273.png?)
4. 编辑并修改server.properties
的三个地方
broker.id=0
log.dirs=/tmp/kafka-logs
(必修)zookeeper.connect=localhost:2181
(可修)
- 通过Kafa的命令和配置文件启动Zookeeper(这种关闭会话框就会关闭Zookeeper)
bin/zookeeper-server-start.sh config/zookeeper.properties
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
ps -aux | grep 'zookeeper'
ps -ef | grep zookeeper
bin/kafka-server-start.sh config/server.properties
sh bin/kafka-server-start.sh config/server.properties 1>/dev/null 2>&1 &
7. Topic常用命令
![在这里插入图片描述](https://img-blog.csdnimg.cn/2f426891cfcb47ada19f7625dbd106d0.png?)
8. 创建Topic(创建)
bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
9. 查看Topic列表
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
[root@QK kafka3.1.0]
Topic: test TopicId: Vxc5mI4KQ1yTEgyWX2HkRA PartitionCount: 1 ReplicationFactor: 1 Configs: segment.bytes=1073741824
Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0
[root@QK kafka3.1.0]
10. 修改分区数(分区数只能增加不能减少,保证其他消费者不会修改分区前后对消费的分区产生冲突)
[root@QK kafka3.1.0]
[root@QK kafka3.1.0]
Topic: test TopicId: Vxc5mI4KQ1yTEgyWX2HkRA PartitionCount: 3 ReplicationFactor: 1 Configs: segment.bytes=1073741824
Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0
Topic: test Partition: 1 Leader: 0 Replicas: 0 Isr: 0
Topic: test Partition: 2 Leader: 0 Replicas: 0 Isr: 0
[root@QK kafka3.1.0]
11. 创建生产者,往指定Topic中发送消息
[root@QK kafka3.1.0]
>hello i am^H^H^H^H^H^H^H^H
>
12. 创建消费者,消费指定Topic中的消息
- 此时的消费者只能消费自己开始监听后的消息,不能消费自己监听前的消息
[root@QK kafka3.1.0]
![左生产,右消费](https://img-blog.csdnimg.cn/3a3b470f90164821bacfd4d52c14d69c.png?)
- 增加参数
--from-beginning
,就可以消费到监听前的消息
![左生产,右消费](https://img-blog.csdnimg.cn/550241afa5df4325ac26e01708ce2433.png?)