Fork me on GitHub

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机制,会让其他消费者来消费该分区】

参考资料:https://www.bilibili.com/video/BV1Xy4y1G7zA

posted @ 2022-08-05 21:15  壶小旭  阅读(50)  评论(0编辑  收藏  举报