Kafka·概述

概览

Producer

生产者发送消息给broker,并不是生成一条消息后立刻发送,而是积攒多条后,批量发送到broker。可以通过配置参数batch.size(单位字节)调整积攒多少后发送

Consumer

Topic

消息的分类

当Producer发送指定topic的消息时,若在server端不存在该topic,可通过配置参数auto.create.topics.enable(默认true,在生产中不建议开启)决定是否自动创建

  • Partition(分区)

    为了降低topic在单个broker上的压力,创建topic时可以为该topic指定分区数量,将该topic的分区分布到不同的broker上,这样当producer发送指定topic的消息时,可以将这些消息分布存储到该topic的分区所在的broker上

    当多个消费者监听同一个topic的消息时,属于同一个消费者组的消费者可以分别消费不同的分区中的消息,如有三个分区,三个消费者,则每个消费者各消费一个分区中的消息

  • 副本

    为了支持高可用,即使集群某台broker宕机,也能正常提供服务,为每个分区创建多个副本,如下topicA指定了三个分区和两个副本

    • leader和follower
      同一个分区的多个副本中会选出一个作为leader,其他作为follower,客户端(Producer和Consumer)只和leader交互。
      follower从leader同步数据,leader宕机后会从其他follower中选举出一个成为新的leader
    • controller

Cosumer Group

生产者生产的消息越来越多,若单个消费者的消费能力不够,则消息会在server端产生堆积,为了提高消费能力,可增加多个消费者,每个消费者至少消费一个分区中的数据,为了避免分区的数据被重复消费,可将这些消费者划分为一个组(设置group.id)

同一个消费者组中的消费者会分配不同的分区去消费,不存在一个以上的消费者消费同一个分区的情况

如果消费者数量大于分区数量,则多余的消费者不消费数据

offset

消费者组在单个分区上消费消息的偏移量

存储机制

分区在broker上的存储形式


.index文件:索引文件
.log文件:存放数据的文件
.timeindex文件:存放时间索引的问题

segment

随着消息的不断增加,存储的文件越来越大,检索效率会越来越低。当文件增大到指定log.segment.bytes大小后,将会创建新的文件用于存储新的数据内容,每个segment都会对应一套.log .index .timeindex文件

相关推荐
starzy199013 小时前
Kafka响应发送:字节是怎么真正写回客户端的
大数据·kafka
阳光不锈@14 小时前
三大主流消息队列架构设计思想剖析:从 RabbitMQ 到 RocketMQ 的改造实践
kafka·rabbitmq·rocketmq·rabbit改造rocket·去除rabbitmq·rabbitmq改造
ZealSinger19 小时前
Boot4升后Kafka retry属性怎么改
kafka·retry·boot4·升级踩坑
starzy199019 小时前
KafkaProducer 源码深度剖析:处理粘包问题的完美方案
大数据·kafka
MrWind灬1 天前
我给自己写了个 Kafka 桌面客户端:MrWindKafkaClient
kafka·pyqt
starzy19902 天前
KafkaProducer 源码深度剖析:与 Broker 建立连接
大数据·kafka
我不会起名字3222 天前
Kafka 重复消费:自动提交位点与手动提交的 3 个错位
kafka·消息队列·幂等·排查
ly76893 天前
Kafka 消费者重试与死信:Spring for Apache Kafka 的边界设计
spring·kafka·apache·并发消费·消费者重试·死信主题·位移提交
我不会起名字3224 天前
Kafka 顺序消息为什么乱了:分区数变化与重试的 3 类原因
kafka·消息队列·顺序·排查
每天一道题5 天前
Kafka 是如何工作的?从 Broker、Partition、Offset 到 Consumer Group
分布式·kafka