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

相关推荐
Kyrie_Li2 天前
Spring Boot Kafka 生产级配置全解析:从入门到精通
spring boot·后端·kafka
2301_801184752 天前
kafka-zookeeper
分布式·zookeeper·kafka
Devin~Y2 天前
抖音级短视频推荐与直播带货平台面试实战:从 Java 微服务到 RAG 智能客服全链路解析
java·spring boot·redis·spring cloud·kafka·agent·rag
livemetee2 天前
关于【Kafka高可用配置】
分布式·kafka
TTBIGDATA2 天前
【Ambari Plus】11.Kafka 安装
大数据·hadoop·分布式·kafka·ambari·hdp·ambari plus
rebibabo3 天前
Java基础(番外) | Kafka 入门:分区、副本与消费者组原理
java·分布式·kafka·学习笔记·副本·分区·异步日志
swg3213213 天前
Kafka基于ZK和KRaft的设计原理与差异
分布式·kafka
阿里云云原生8 天前
数据链路再精简:Kafka 如何做到“零 ETL”一键写入 Apache Iceberg?
kafka
阿里云云原生14 天前
告别冗长链路!Kafka × Table Bucket 实现开放表格式零 ETL 实时入湖
云原生·kafka
whaledown20 天前
Kafka 与 Java 消息队列入门:用订单场景理解核心机制
java·kafka·消息队列·springboot