Kafka:安装及基础概念
一. kafka安装
1. 安装前提
- 安装Jdk、javac验证是否安装成功
- 安装zookeeper 见链接教程
2. 到官网下载
3. 将下载好的文件上传到Linux服务器
4. 解压
tar -zxvf kafka_2.13-3.2.1.gz
cd kafka_2.13-3.2.1/config
vi server.properties
# The id of the broker. This must be set to a unique integer for each broker.
#集群节点编号 默认为0 broker.id在集群中必须是唯一的
broker.id=0
#kafka所在主机的ip地址 和 指定的开发端口号
listeners=PLAINTEXT://10.1.48.214:9092
#kafka日志路径
log.dirs=/home/hcx/kafka/kafka_2.13-3.2.1/kafka-logs
#zookeeper集群连接地址
zookeeper.connect=localhost:2181
5. 启动kafka
./kafka-server-start.sh -daemon ../config/server.properties
6. 创建topics
#通过kafka想zk中创建一个主题
./kafka-topics.sh --bootstrap-server 10.1.48.214:9092 --create --topic test --partitions 2 --replication-factor 1
#查看所有的topic
./kafka-topics.sh --list --bootstrap-server 10.1.48.214:9092
二. kafka发送与消费
1. 发送消息
#在bin目录下自带kafka-console-producer.sh
./kafka-console-producer.sh --broker-list 10.1.48.214:9092 --topic heima
2. 消费消息
#模式1:从最后一条消息的偏移量+1开始消费,即实时消费,发送消息立马同步到消费消息
./kafka-console-consumer.sh --bootstrap-server 10.1.48.214:9092 --topic heima
#模式2:从头开始消费,即接受发送消息的所有历史消息
./kafka-console-consumer.sh --bootstrap-server 10.1.48.214:9092 --from-beginning --topic heima
3. 注意点
- 消息会被存储
- 消息是顺序存储
- 消息是有偏移量offset
- 消费时可以指明偏移量进行消费
3. kafka单播与多博
1. 单播消息
同一个消费组中,只有一个消费者可以收到订阅的topic中的消息。
./kafka-console-consumer.sh --bootstrap-server 10.1.48.214:9092 --consumer-property group.id=testGroup01 --topic heima
2. 多播消息
不同的消费组订阅同一个topic,那么不同的消费组中均只有一个消费者能够收到消息。也就代表多个消费组中多个消费者收到了同一个topic的消息
#消费组testGroup01
./kafka-console-consumer.sh --bootstrap-server 10.1.48.214:9092 --consumer-property group.id=testGroup01 --topic heima
#消费组testGroup02
./kafka-console-consumer.sh --bootstrap-server 10.1.48.214:9092 --consumer-property group.id=testGroup02 --topic heima
3. 查看消费组的详细消息
#查看当前有多少组
./kafka-consumer-groups.sh --bootstrap-server 10.1.48.214:9092 --list
#查看指定消费组(testGroup01)的详细信息
./kafka-consumer-groups.sh --bootstrap-server 10.1.48.214:9092 --describe --group testGroup01
参数 | 含义 |
---|---|
PARTITION | 表示话题分区 |
CURRENT-OFFSET | 表示最后被消费的消息偏移量 |
LOG-END-OFFSET | 消息总量(最后一条消息的偏移量) |
LAG | 剩余未被消费的消息量 |
四. kafka主题和分区的概念
1). 主题Topic
主题-topic在kafka中是一个逻辑的概念,kafka通过topic将消息进行分类。不同的topic会被订阅该topic的消费者消费。
但是有一个问题,如果说这个topic中的消息非常非常多,多到需要几T来存,因为消息是会被保存到log日志文件中的。为了解决这个文件过大的问题,kafka提出了Partition分区的概念
2). 分区Partition
1. 概念
通过Partition将一个topic中的消息分区来存储。其好处如下:
-
分区存储,可以解决统一存储文件过大的问题
-
提高了读写的吞吐量:读和写可以同时在多个分区中进行
2. 创建多分区的topic
./kafka-topics.sh --bootstrap-server 10.1.48.214:9092 --create --topic test --partitions 2 --replication-factor 1
3. kafka中消息日志文件保存的内容解析
文件名 | 含义 |
---|---|
00000000000000000000.log | 保存的就是topic的消息 |
00000000000000000000.inde | 偏移量索引文件 |
00000000000000000000.timeindex | 时间戳索引文件 |
leader-epoch-checkpoint | 保存了每一任leader开始写入消息时的offset, 会定时更新 |
__consumer_offsets-49 | kafka内部自己创建了_consumer_offsets主题包含了50个分区。这个主题用来存放消费者消费某个主题的偏移量。因为每个消费者都会自己维护着消费的主题的偏移量,也就是说每个消费者会把消费的主题的偏移量自主上报给kafka中的默认主题:consumer_offsets。因此kafka为了提升这个主题的并发性,默认设置了50个分区。 |
注意:文件中保存的消息默认是7天。7天到后自动删除。
五. Kafka集群操作
1. 集群搭建
-
创建三个server.properties 【位于config目录下】
#1. copy两份server.properties cp server.properties server1.properties cp server.properties server2.properties #2. 修改.properties配置文件中的三个参数broker.id listeners log.dirs #集群节点编号 默认为0 broker.id在集群中必须是唯一的 broker.id=2 #kafka所在主机的ip地址 和 指定的开发端口号 listeners=PLAINTEXT://10.1.48.214:9094 #kafka日志路径 log.dirs=/home/hcx/kafka/kafka_2.13-3.2.1/kafka-logs-2
-
启动三台broker
#关闭之前的kafka (之前未启动过kafka可忽略) ps aux | grep server.properties kill pid #启动命令 ./kafka-server-start.sh -daemon ../config/server.properties ./kafka-server-start.sh -daemon ../config/server1.properties ./kafka-server-start.sh -daemon ../config/server2.properties
-
校验是否启动成功
#进入zookeeper查看/brokers/ids中是否有三个znode[0,1,2] cd /home/hcx/zookeeper/apache-zookeeper-3.8.0-bin/bin ./zkCli.sh ls /brokers/ids
2. 什么是副本
当我们创建topic的时候,除了定义分区外,还指明了副本数。
./kafka-topics.sh --bootstrap-server 10.1.48.214:9092 --create --partitions 2 --replication-factor 1 --topic my-replicated-topic
-
replication-factor :副本数
-
概念:副本是为了主题中的分区创建多个备份,多个副本在kafka集群的多个broker中,会有一个副本作为leader,其他的都是fllower
-
查看topic情况
./kafka-topics.sh --describe --bootstrap-server 10.1.48.214:9092 --topic my-replicated-topic
参数 | 含义 |
---|---|
Replicas | 当前副本存在的broker节点 |
Leader | 每个partition都有一个broker作为leader。消息发送方要把消息发给哪个broker?就看副本的leader是在哪个broker上面。副本里的leader专⻔用来接收消息。当leader挂了,经过主从选举,从Follower中选举产生一个新的Leader |
Follower | 接收Leader的同步数据 |
Isr | 可以同步的broker节点和已同步的broker节点,存放在isr集合中。如果isr中的节点性能较差,会被踢出isr集合。 |
3. 集群消费
1)向集群发送消息
./kafka-console-producer.sh --broker-list 10.1.48.214:9092,10.1.48.214:9093,10.1.48.214:9094 --topic my-replicated-topic
2)从集群中消费消息
./kafka-console-consumer.sh --bootstrap-server 10.1.48.214:9092,10.1.48.214:9093,10.1.48.214:9094 --from-beginning --topic my-replicated-topic
3)指定消费组来消费消息
./kafka-console-consumer.sh --bootstrap-server 10.1.48.214:9092,10.1.48.214:9093,10.1.48.214:9094 --from-beginning --consumer-property group.id=testGroup1 --topic my-replicated-topic
4)分区消费组消费者的细节
- 为了保证消费的顺序性,一个partition只能被一个消费组中的一个消费者消费。
- Kafka只在partition的范围内保证消息消费的局部顺序性,不能在同一个topic中的多个partition中保证总的消费顺序性。
- 一个消费者可以消费多个partition。【如果消费者刮来了,那么会出发Reblance机制,会让其他消费者来消费该分区】
脚踏实地,注重基础。