Kafka 源码学习

本文深入剖析Kafka客户端发送消息的核心流程,包括sender线程的工作原理,以及Kafka内存池的设计。同时,讨论了Kafka的元数据拉取流程、核心组件和调优参数,特别是ISR机制。此外,还介绍了Kafka的网络架构,展示其如何处理高并发,并从Producer源码中汲取设计启示。
摘要由CSDN通过智能技术生成

Kafka 源码剖析

一 Kafka客户端发送消息的核心流程

线程:
Kafka 客户端总共两个线程, 一个主线程,一个 sender 线程。 获取元数据也是由 Sender 线程完成的

1 同步等待拉取元数据

2 对消息 KV 进行序列号
3 根据分区选择消息应该发送的分区
不传分区则算法选择 – 遍历选择分区
4 确认消息大小是否超过阈值
5 根据元数据信息,封装分区对象
6 给每条消息绑定它的回调函数
7 把消息放入缓存,封装批次(检查两次 默认 1M 一次,内置 32M 一次)
8 唤醒 sender 线程 (并未休眠,单纯踢它一脚,就是玩)

在这里插入图片描述

sender 流程
遍历所有分区,得到所有批次,判断批次是否需要发送

一个批次默认 16K
如果目前写入 10K 并未写满,也会发送出去。 因默认 lingerMS 默认值为0 需要修改
建议修改 100MS timeToWaitMS =linerMs = 100ms # 等待 MS 必须发送
批次默认数据也应该调优,根据公司业务数据来定,设置过大也将浪费内存空间
发送判断条件
1 批次写满
2 linerMs 时间到
3 内存不够,立即发送

二 Kafka 内存池

在这里插入图片描述

个性化内存池

个性化内存池 比如 1M 一直写不满 就会浪费资源
在这里插入图片描述

三 Kafka 拉取元数据流程

在这里插入图片描述

四 Kafka 核心

生产者与消费者对于 Kafka 来讲都属于客户端

所以核心代码在 client 端
在这里插入图片描述

五 Kafka 一些调优参数

1. kafka 消息缓存大于 1M 会报错 超 32M 报错
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值