kafka
文章平均质量分 93
kafka 源码分析
JellyfishMIX
qunar -- java 开发
展开
-
kafka 高吞吐设计分析
非零拷贝发送数据过程: 用户执行系统调用读磁盘,用户态切换成内核态。硬盘上的数据通过 DMA 读入内核空间后,cpu 拷贝至用户空间,切换回用户态。执行网络 IO 系统调用,用户态切换成内核态,cpu 拷贝数据至内核空间(socket 缓存),通过 DMA 写入网卡。存在两次 cpu 拷贝和两次内核态用户态切换浪费。原创 2024-04-05 00:30:35 · 643 阅读 · 0 评论 -
kafka 消息防丢失/消息防重复设计分析
消息语义(诉求)有三种。分别是: 消息最多传递一次(消息不重复), 消息最少传递一次(消息不丢失), 消息有且仅有一次传递(消息不重复且不丢失)。原创 2024-04-05 00:25:04 · 1506 阅读 · 0 评论 -
kafka 对 java NIO 的封装
NetworkReceive: 对 NIO 中读 Buffer 的封装,用来缓存接收的数据。NetworkSend: 对 NIO 中写 Buffer 的封装,用来缓存发送的数据。KafkaChannel: 把 TransportLayer, NetworkReceive 和 NetworkSend 又做了一次封装,隐藏了底层组件的细节。原创 2023-06-09 14:35:22 · 1237 阅读 · 0 评论 -
kafka-Producer Sender 源码分析
发送请求分为两步。1. 第一步是消息预发送,Sender 从 RecordAccumulator 拉取要发送的消息集合,封装成 ClientRequest,传递给 NetworkClient。NetworkClient 首先根据 ClientRequest 构造 InFlightRequest,InFlightRequest 表示已发送但还未收到响应的请求。然后根据收到的 ClientRequest 构造 NetworkSend 类对象,放入到 KafkaChannel 的缓存里,消息预发送结束。原创 2023-05-16 15:15:59 · 699 阅读 · 0 评论