kafka为什么分区不能那么多

1.生产者内存模型被分区数量击穿

生产者调用send方法发送消息时,不会立即发送,而是先进入一个内存缓冲区,其核心结构是一个concurrentmap,以消息的key为key,value是一个deque,也就是说每一个分区都占一个消息队列,消息发送的时机是达到一定时间或者分区满了才会发送,分区越多,数据越难达到满的状态,发送次数越多,网络io越严重,而且分区越多,而且多个分区竞争发送机会是靠reentrantlock+condition来实现的分区越多竞争越激烈,

2.kafka之所以因为顺序读写和pagecache,分区越多导致磁头不断寻址,顺序读写退化成随机写,pagecache需要在多个文件之间切换,命中率降低

3.Linux系统下,kafka的每一个分区在运行时至少需要打开很多文件的句柄,句柄耗尽后会导致系统文件异常

4.分区多了对消费者的影响也很大,消费者在组在消费者加入或离开时会触发重新分配,分区变化时也会触发重新分配,重新分配会根据分区分配算法,遍历所有分区进行分配,阻塞kafka正常活动,造成stw,分区越多意味着单消费者会分到更多的分区,容易超时被踢出消费者组,再次出发重分配,恶性循环,

5.分区计算公式,max(目标吞吐量/单分区生产者吞吐量,目标吞吐量/单分区消费者吞吐量),在高并发场景下6至12个分区即可满足,

相关推荐
Nano叶落4 天前
Kafka 消费积压排查入门:Docker 搭环境亲手制造一次 ‘消息堵死‘,10 分钟看懂 Lag
kafka
吉甫作诵5 天前
Kafka 集群安装与运维实战:消费组排查、Offset 重置与副本重分配
大数据·运维·分布式·kafka·消息队列
imDwAaY5 天前
消息队列四大核心问题:顺序性、幂等性、可靠性与一致性
学习·kafka·rabbitmq
wno7045 天前
Spring Boot整合Kafka
spring boot·kafka
音符犹如代码6 天前
Kafka 接入 AI 的三条路线:MCP 提案、会话记忆与实时上下文
java·大数据·ai·kafka
happy_king_zi6 天前
kafka两种部署模式的区别
kafka·消息队列·sre
happy_king_zi6 天前
Kafka 3.9.2 KRaft 模式三节点集群完整部署指南
kafka·消息队列
明快de玄米616 天前
Kafka 可靠消息投递:核心机制总结
kafka
明快de玄米616 天前
Kafka:基于 Outbox 的可靠消息投递完整方案
kafka
szephyr7 天前
消息队列入门:RabbitMQ 和 Kafka 到底怎么选,什么时候不该用
后端·架构·kafka·消息队列·rabbitmq