Kafka--03---kafka安装消息的细节 主题和分区的概念
Posted 高高for 循环
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kafka--03---kafka安装消息的细节 主题和分区的概念相关的知识,希望对你有一定的参考价值。
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
kafka安装和搭建
Kafka的安装
- 部署⼀台zookeeper服务器
- 安装jdk
- 下载kafka的安装包:http://kafka.apache.org/downloads
- 上传到kafka服务器上: /usr/local/kafka
- 解压缩压缩包
- 进⼊到config⽬录内,修改server.properties
#broker.id属性在kafka集群中必须要是唯⼀
broker.id=0
#kafka部署的机器ip和提供服务的端⼝号
listeners=PLAINTEXT://192.168.65.60:9092
#kafka的消息存储⽂件
log.dir=/usr/local/data/kafka-logs
#kafka连接zookeeper的地址
zookeeper.connect=192.168.65.60:2181
进⼊到bin⽬录内,执⾏以下命令来启动kafka服务器(带着配置⽂件)
./kafka-server-start.sh -daemon ../config/server.properties
校验kafka是否启动成功:
- 进⼊到zk内查看是否有kafka的节点: /brokers/ids/0
创建topic
- 通过kafka命令向zk中创建⼀个主题
./kafka-topics.sh --create --zookeeper 172.16.253.35:2181 --replicationfactor
1 --partitions 1 --topic test
- 查看当前zk中所有的主题
./kafka-topics.sh --list --zookeeper 172.16.253.35:2181 test
发送消息
把消息发送给broker中的某个topic,打开⼀个kafka发送消息的客户端,然后开始⽤客户端向
kafka服务器发送消息
./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --
topic test
消费消息
打开⼀个消费消息的客户端,向kafka服务器的某个主题消费消息
- ⽅式⼀:从当前主题中的最后⼀条消息的offset(偏移量位置)+1开始消费
./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --
topic test
⽅式⼆:从当前主题中的第⼀条消息开始消费
./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --
from-beginning --topic test
消息的细节
消息的储存
- ⽣产者将消息发送给broker,broker会将消息保存在本地的⽇志⽂件中
/usr/local/kafka/data/kafka-logs/主题-分区/00000000.log
- 消息的保存是有序的,通过offset偏移量来描述消息的有序性
- 消费者消费消息时也是通过offset来描述当前要消费的那条消息的位置
单播消息
在⼀个kafka的topic中,启动两个消费者,⼀个⽣产者,问:⽣产者发送消息,这条消息是否同时会被两个消费者消费?
- 如果多个消费者在同⼀个消费组,那么只有⼀个消费者可以收到订阅的topic中的消息。换⾔ 之,
- 同⼀个消费组中只能有⼀个消费者收到⼀个topic中的消息
./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --
consumer-property group.id=testGroup --topic test
多播消息
- 不同的消费组订阅同⼀个topic,那么不同的消费组中只有⼀个消费者能收到消息。实际上也是多个消费组中的多个消费者收到了同⼀个消息。
./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --
consumer-property group.id=testGroup1 --topic test
./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --
consumer-property group.id=testGroup2 --topic test
查看消费组的详细信息
通过以下命令可以查看到消费组的相信信息:
./kafka-consumer-groups.sh --bootstrap-server 172.16.253.38:9092 --
describe --group testGroup
重点关注以下⼏个信息:
- current-offset: 最后被消费的消息的偏移量
- Log-end-offset: 消息总量(最后⼀条消息的偏移量)
- Lag:积压了多少条消息
主题和分区的概念
1.主题Topic
- 主题-topic在kafka中是⼀个逻辑的概念,kafka通过topic将消息进⾏分类。不同的topic会被
订阅该topic的消费者消费。 - 但是有⼀个问题,如果说这个topic中的消息⾮常⾮常多,多到需要⼏T来存,因为消息是会被
保存到log⽇志⽂件中的。为了解决这个⽂件过⼤的问题,kafka提出了Partition分区的概念
2.分区Partition
1)分区的概念
通过partition将⼀个topic中的消息分区来存储。这样的好处有多个:
- 分区存储,可以解决统⼀存储⽂件过⼤的问题
- 提供了读写的吞吐量:读和写可以同时在多个分区中进⾏
2)创建多分区的主题
./kafka-topics.sh --create --zookeeper 172.16.253.35:2181 --replicationfactor
1 --partitions 2 --topic test1
kafka中消息⽇志⽂件中保存的内容
- 00000.log: 这个⽂件中保存的就是消息
- __consumer_offsets-49:
kafka内部⾃⼰创建了__consumer_offsets主题包含了50个分区。这个主题⽤来存放消费
者消费某个主题的偏移量。因为每个消费者都会⾃⼰维护着消费的主题的偏移量,也就是
说每个消费者会把消费的主题的偏移量⾃主上报给kafka中的默认主题:
consumer_offsets。因此kafka为了提升这个主题的并发性,默认设置了50个分区。
kafka内部⾃⼰创建了__consumer_offsets主题包含了50个分区。这个主题⽤来存放消费者消费某个主题的偏移量
- 提交到哪个分区:通过hash函数:hash(consumerGroupId) % __consumer_offsets 主题的分区数
- 提交到该主题中的内容是:key是consumerGroupId+topic+分区号,value就是当前 offset的值
- ⽂件中保存的消息,默认保存7天。七天到后消息会被删除。
以上是关于Kafka--03---kafka安装消息的细节 主题和分区的概念的主要内容,如果未能解决你的问题,请参考以下文章