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指定了三个分区和两个副本

    • leaderfollower
      同一个分区的多个副本中会选出一个作为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文件

相关推荐
范什么特西15 小时前
关于kafka
分布式·kafka
Wang's Blog3 天前
Go-Zero 项目开发19:基于 Kafka 的异步消息存储与转发实战
golang·kafka
Devin~Y3 天前
互联网大厂 Java 面试实录:Spring Boot、MyBatis、Redis、Kafka、Spring Security、RAG 与 MCP 全链路问答
java·redis·kafka·mybatis·spring security·spring mvc·sprint boot
java1234_小锋4 天前
【免费】基于Spark实时电商用户行为分析与预测(Java版本+可视化大屏+Kafka+SpringBoot+Vue3) 锋哥原创出品,必属精品
java·spark·kafka·实时电商用户行为分析与预测系统
AI人工智能+电脑小能手5 天前
【大白话说Java面试题 第194题】【08_Kafka篇】第10题:简述 Kafka 的 Rebalance 机制?
java·kafka·消费者组·rebalance·分布式消息队列
AI人工智能+电脑小能手6 天前
【大白话说Java面试题 第192题】【08_Kafka篇】第8题:死信队列是什么?延时队列是什么?
java·kafka·消息队列·死信队列·延时队列
AI人工智能+电脑小能手6 天前
【大白话说Java面试题 第190题】【08_Kafka篇】第6题:消息队列有什么作用?
java·kafka·消息队列·系统设计·分布式架构
风中凌乱7 天前
kafka新版本集群的安装与部署
分布式·kafka
abcy0712137 天前
kafka消息丢失与消息重复消费
kafka
富士康质检员张全蛋7 天前
Kafka的操作-消费的详情
分布式·kafka