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

相关推荐
小白羊丨2 天前
Kafka任务重试、退避与失败恢复怎么做?
分布式·kafka
爱三盖浇饭3 天前
挑战从零开始学习Kafka2: Kafka 常见问题解决方案
学习·kafka
山鬼龙王3 天前
吃透 Kafka:一篇讲清楚核心原理和高频考点
kafka
pnoker6 天前
IoT DC3 消息总线:六适配器可插拔设计
物联网·架构·kafka·消息队列·rabbitmq
cxhello6 天前
消费者活着、心跳正常、日志干净,但它七天没拉过一条消息
python·kafka
2601_962064707 天前
SpringBoot 整合 Avro 与 Kafka
spring boot·kafka·linq
HashFlag7 天前
本地极简安装kafka
kafka
ZCBUS实时计算7 天前
信创混合存储架构落地实战|基于 ZCBUS 实时计算构建证券高可用实时风控数仓
大数据·架构·flink·kafka·dba
Sayai8 天前
Kafka 去 ZooKeeper 实战评估:KRaft 模式架构解析与生产落地决策指南
zookeeper·架构·kafka
StarRocks_labs8 天前
StarRocks x Fluss x Paimon 湖流一体方案:构建秒级响应、湖流一体的实时数据引擎
starrocks·kafka·lambda·查询·paimon·fluss·湖流一体