kafka分区重分配与Rebalance过程 1.Kafka分区重分配Kafka分区重分配是Kafka集群管理中的一个重要操作,它涉及将分区从一组broker移动到另一组broker。下面我将详细分析分区重分配的触发场景、策略以及可能带来的问题。 1.1 分区重分配的触发场景 集群扩容 :当向Kafka集群添加新的broker节点时,需要将现有分区重新分配到新节点上以实现负载均衡 broker下线 :当需要下线某个broker时,需要将该br 2025-05-31 学习笔记 #中间件 #kafka
Kafka Controller控制器 Kafka Controller控制器职责Kafka Controller是Kafka集群中的一个核心组件,负责管理和协调整个集群的状态。在Kafka集群中,只有一个broker会被选举为Controller,它承担着集群管理的重要职责。 1.Controller的主要职责1.1 Broker管理 监控Broker状态:实时监控集群中所有Broker的上线和下线状态 处理Broker故障:当Bro 2025-05-31 学习笔记 #中间件 #kafka
grpc-go底层实现三:grpc客户端头帧发送过程 newClientStreamWithParams 方法详细分析newClientStreamWithParams 方法位于 stream.go 文件的第260-404行,是 gRPC 客户端创建流式连接的核心方法。这个方法负责初始化客户端流,设置上下文、超时、压缩选项,并创建与服务器的连接。下面我将详细分析这个方法的功能及其调用关系。 方法功能分析1. 上下文和超时处理123456var can 2025-05-31 学习笔记 #grpc
grpc-go底层实现二:客户端与服务端建立连接过程 NewHTTP2Client 方法详细分析NewHTTP2Client 方法是 gRPC 客户端创建 HTTP/2 传输层连接的核心方法,负责建立与服务器的 HTTP/2 连接,并设置相关参数。下面我将详细分析这个方法的功能、流程以及头帧发送与连接建立的过程。 方法功能概述NewHTTP2Client 方法位于 internal/transport/http2_client.g 2025-05-26 学习笔记 #grpc
grpc-go底层实现一:gRPC Client初始化与连接建立准备工作 基于grpc-go 的v1.72.0 gRPC 客户端创建过程分析分析 clientconn.go 中的 NewClient 方法及其调用的方法,详细阐述 gRPC 在创建客户端时的工作流程。 1. 客户端创建流程概述gRPC 客户端创建主要通过 NewClient 方法完成,该方法创建一个 ClientConn 对象,这是 gRPC 客户端的核心组件。整个创建过程可以分为以下几个主要阶段: 2025-05-26 学习笔记 #grpc
HighWaterMark与副本同步机制 0.11版本之前依赖于HW实现副本同步备份,0.11之后通过Leader epoch实现副本同步备份。 两个概念: LEO:log end offset,日志末端位移,记录了该副本底层日志下一条消息应存放的位置。 HW,高水位值,小于等于HW的消息是被认为已经备份的。 [0, 7]的消息是已经完全备份,[8, 15)的数据为尚未完全备份的。 kafka中所有的副本都保有自己的HW值和LEO值, 2025-04-12 学习笔记 #中间件 #kafka
kafka日志存储 kafka中的topic是逻辑上的概念,而真正存储消息的是分区,更具体点来说是分区中的segment,每个分区可分为多个segment,存储的消息称为日志。 1、LogSegment一个partition分区拥有多个logsegment,kafka日志追加是顺序写入的,把分区分为多个日志段可减小日志文件的大小,在进行日志删除和数据读取的时候也可以快速定位。需要注意的是只有活跃的日志段拥有文件的写 2025-04-12 学习笔记 #中间件 #kafka
kafka消费者 1、消费者与消费组消费组是kafka提供的可扩展且具有容错性的消费者机制,同一个消费组的消费者共有一个groupId,一个分区只能被同一个消费组中的一个消费者消费。 消费组解决了什么问题: 消费模式灵活,假设三个消费者订阅了一个主题,当使用三个消费组时,每个消费组有一个消费者,利用分区在不同消费组间共享的特性,就实现了发布订阅(广播)模式;当把这三个消费者放在一个消费组中时利用分区在消费组成员间 2025-04-12 学习笔记 #中间件 #kafka
kafka生产者 1、生产者1.1、batch生产者在发送消息时不会将每一条消息都单独发送到broker中,而是采取了批量发送以此减少网络请求次数和磁盘IO次数,消息会先发到缓冲区,这个缓冲区的大小是可配置的,在缓冲区中将消息进行分批,缓冲区大小默认为32M,当缓冲区使用完后消息的追加将会被阻塞直到有空闲的区域。batch.size: 此参数配置发送到同一分区的批量提交的数据的大小,默认为16k,当消息积压到这个 2025-04-12 学习笔记 #中间件 #kafka
chat聊天系统思考之二 1、前言考虑下面几个条件下如何提升kafka的消费速度 消息要求严格有序,如chat聊天消息 业务处理速度慢,如处理一条数据需要100ms 分片不合理,如有的分区很闲,有的分区消息数量积压 2、解决方案1、顺序问题关于消息消费时存在先后顺序问题,在chat聊天系统思考之一中已经加以说明。具体实现大致为对同一会话、帖子Id等维度放入同一分区中,如使用Id % 分区数,如下图:上面的解决方案是将同 2025-04-12 工作总结 #工作总结 #聊天系统