Kafka篇——Kafka中主题、分区和副本,重点中的重点!涵盖主题分区的创建和原理!

主题和分区概念

一、主题介绍
主题topic在Kafka中是一个逻辑的概念,Kafka通过topic将消息进行分类。不同的topic会被订阅该topic的消费者消费

二、引出分区
我们学习Kafka的时候,了解到Kafka中的消息会被持久化到log文件中,如果这个topic中的消息非常多,多到几个T的内存,那么这个时候肯定会存在内存过大的问题。因此提出了Partition分区的概念

三、分区介绍
一个主题中的消息量是非常巨大的,因此可以通过分区的设置,来分布式存储这些消息。比如一个topic中创建了3个分区,那么topic中的消息就会分别放在这三个分区中
注意点:主题下的分区中的消息都是一样的吗?
在Kafka中,主题是一个逻辑上的概念,它可以被细分为多个分区。每个分区都是一个独立的日志文件,用于存储该分区内的消息。因此,同一主题下的不同分区包含的消息是不同的。

1、优势
(1)分区存储,可以解决统一存储文件过大的问题
(2)提高了读写的吞吐量,因为读和写可以同时在多个分区中进行

2、创建多分区主题命令

./kafka-topics.sh --create --zookeeper 172.16.222.32:8080 --replication-factor 1 --partitions 2 --topic test1

这个时候的数据实际上是存储到了data/kafka-logs/test1-0和test1-1文件中

三、Kafka内置Topic:_consumer_offsets分区工作原理(重点!)

在/kafka/data/kafka-logs下面存在50个_consumer_offsets的分区:

消费者会定期将自己消费分区的offset提交给Kafka的内部topic:_consumer_offsets,提交过去的时候,key是consumerGroupId+topic+分区号,value是当前offset的值,Kafka会定期清理topic里的消息,最后保留的就是最新的那条数据
因为_consumer_offsets可能会接收高并发的请求,Kafka默认开启50个分区,当然也可以通过offset.topic.num.partition设置,这样就可以通过加机器的方式抗大并发

计算consumer消费的offset要提交到_consumer_offsets的哪个分区
公式:hash(consumerGroupId)%_consumer_offsets主题的分区数

副本

一、副本概念
副本是对分区的备份。在集群中,不同的副本会被部署在不同的Broker上。

二、创建副本案例
1、创建一个2个分区、3个副本的主题

./kafka-topics.sh --create --zookeeper 172.16.253.35:2181 --replication-factor 3 --partitions 2 --topic my-replicated-topic

2、查看当前主题详细信息

./kafka-topics.sh --describe --zookeeper 172.16.253.35:2181 --topic my-replicated-topic

上图中涉及专有名称释义:
Partition:表示创建几个分区
Leader:表示分区副本中的Leader主分区,Kafka的写和读都发生在Leader上,Leader负责把数据同步到Follower,当Leader挂了,经过
主从选举,从多个Follower中选举生成一个新的Leader
Replicas:表示创建的几个副本
Isr(In-Sync Replicas):可以同步和已同步的分区会被存放到Isr集合中
·保证数据一致性:ISR中的所有副本都与leader保持同步,这样,当生产者写入数据时,只要数据成功写入ISR中的所有副本,就可以确认消息已经成功写入。
同时,消费者从任何ISR中的副本读取数据都可以获得一致的结果。
·提高系统可靠性:在leader发生故障时,可以从ISR中选举一个新的leader,这样新leader的数据一定与老leader的数据一致,避免了数据丢失。
·提高写性能:生产者可以从ISR中的任意一个副本读数据,这可以分担leader的读压力,提高读性能。
注意,如果Isr中 的分区性能较差,会被踢出Isr集合

生产者生产消息,消费者消费消息。都是针对于Leader来进行的,副本的作用只是当Leader挂掉了,担任Leader作用,保证数据的一致性

至此,关于Kafka的主题、分区和副本的介绍已经完毕,这一节内容比较多而且非常重要,希望大家能够反复学习,加深理解和记忆!

  • 18
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Be explorer

若认可笔者文章,手头富裕望支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值