• Kafka中主题和分区的概念


    Kafka中主题和分区的概念

    主题Topic

    主题Topic可以理解成是一个类别的名称。主题-topic在kafka中是一个逻辑的概念,kafka通过topic将消息进行分类。不同的topic会被订阅该topic的消费者消费。但是有一个问题,如果说这个topic中的消息非常非常多,多到需要几T来存,因为消息是会被保存到log日志文件中的。为了解决这个文件过大的问题,kafka提出了Partition分区的概念。

    Kafka 中的消息以主题为单位进行归类,生产者负责将消息发送到特定的主题(发送到 Kafka
    集群中的每一条消息都要指定一个主题),而消费者负责订阅主题并进行消费。

    分区Partition

    分区的概念

    通过partition将一个topic中的消息分区来存储。这样的好处有多个:

    • 分区存储,可以解决统一存储文件过大的问题
    • 提供了读写的吞吐量:读和写可以同时在多个分区中进行

    在这里插入图片描述
    一个主题中的消息量是非常大的,因此可以通过分区的设置,来分布式存储这些消息。比如一个topic创建了3个分区。那么topic中的消息就会分别存放在这三个分区中。

    主题是一个逻辑上的概念,它还可以细分为多个分区,一个分区只属于单个主题,很多时候也会把分区称为主题分区(Topic-Partition)。同一主题下的不同分区包含的消息是不同的,分区在存储层面可以看作一个可追加的日志(Log)文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。

    offset 是消息在分区中的唯一标识,Kafka 通过它来保证消息在分区内的顺序性,不过 offset 并不跨越分区,也就是说,Kafka 保证的是分区有序而不是主题有序。
    在这里插入图片描述
    如上图所示,主题中有4个分区,消息被顺序追加到对应分区日志文件的尾部。Kafka 中的分区可以分布在不同的服务器(broker)上,也就是说,一个主题可以横跨多个 broker,以此来提供比单个 broker 更强大的性能。

    每一条消息被发送到 broker 之前,会根据分区规则选择存储到哪个具体的分区。如果分区规则设定得合理,所有的消息都可以均匀地分配到不同的分区中。如果一个主题只对应一个文件,那么这个文件所在的机器I/O将会成为这个主题的性能瓶颈,而分区解决了这个问题。在创建主题的时候可以通过指定的参数来设置分区的个数,当然也可以在主题创建完成之后去修改分区的数量,通过增加分区的数量可以实现水平扩展。

    创建多分区的主题

    ./kafka-topics.sh --create --zookeeper 172.16.253.35:2181 --replication-factor 1 --partitions 2 --topic test1
    
    • 1

    可以通过这样的命令查看topic的分区信息

    ./kafka-topics.sh --describe --zookeeper localhost:2181 --topic test1
    
    • 1

    分区的作用:

    • 可以分布式存储
    • 可以并行写

    实际上是存在data/kafka-logs/test-0 和 test-1中的0000000.log文件中

    kafka中消息日志文件中保存的内容

    • 00000.log: 这个文件中保存的就是消息
    • __consumer_offsets-49:
      kafka内部自己创建了__consumer_offsets主题包含了50个分区。这个主题用来存放消费者消费某个主题的偏移量。因为每个消费者都会自己维护着消费的主题的偏移量,也就是说每个消费者会把消费的主题的偏移量自主上报给kafka中的默认主题:consumer_offsets。因此kafka为了提升这个主题的并发性,默认设置了50个分区
    • 提交到哪个分区:通过hash函数:hash(consumerGroupId) % __consumer_offsets主题的分区数
    • 提交到该主题中的内容是:key是consumerGroupId+topic+分区号,value就是当前offset的值
    • 文件中保存的消息,默认保存7天。七天到后消息会被删除。

    ref

    https://blog.csdn.net/li1669852599/article/details/113091841

  • 相关阅读:
    导数求函数最大值和最小值习题
    线下门店价格怎么检查
    智能电表远程抄表在电力系统中的运用分析
    【新书推荐】AI时代,当程序员遇到ChatGPT,开发效率飞起来!
    Selenium+Python系列 - 开发环境搭建
    通配符、别名
    java计算机毕业设计基于安卓的城市公交查询小程序 uniapp
    [附源码]计算机毕业设计校园代取快递系统Springboot程序
    zabbix模板监控和自定义监控
    肿瘤NGS测序行业背景介绍
  • 原文地址:https://blog.csdn.net/weixin_45522528/article/details/126772695