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个分区即可满足,

相关推荐
Devin~Y12 小时前
大厂Java面试实录:Spring Boot/Cloud、Redis+Kafka、JVM调优与RAG/Agent(Spring AI)三轮递进问答
java·jvm·spring boot·redis·spring cloud·kafka·rag
小钻风33661 天前
ZooKeeper + Kafka 集群搭建实战记录
分布式·zookeeper·kafka
小江的记录本1 天前
【Kafka核心】Kafka 3.0+ KRaft模式(替代ZooKeeper)核心原理与优势
java·数据库·分布式·后端·zookeeper·kafka·rabbitmq
bing_1581 天前
Zookeeper 在 Kafka 中扮演了什么角色?
分布式·zookeeper·kafka
醉颜凉1 天前
Kafka为什么抛弃ZooKeeper?深度解析KRaft时代的技术变革
zookeeper·kafka·linq
会编程的土豆1 天前
Kafka 操作流程(零基础完整流程)
分布式·kafka
岳麓丹枫0011 天前
PostgreSQL 15.7 CDC → Flink → Kafka 操作笔记
postgresql·flink·kafka
会编程的土豆1 天前
Kafka 零基础入门(最基本用法)
分布式·kafka
会编程的土豆1 天前
Kafka 入门笔记(核心语法 + 用法)
笔记·分布式·kafka