其他
大数据中台之Kafka,到底好在哪里?
The following article comes from 架构之美 Author 孙玄
优秀设计之基于NIO编程
优秀设计之高性能网络设计
(2)当客户端发起到服务端的网络连接请求时,服务端的 Selector 监听到 OP_ACCEPT 事件,会触发 Acceptor 来处理 OP_ACCEPT 事件.
(3)当 Acceptor 接收到来自客户端的 socket 请求时会为这个连接创建对应的 SocketChannel,将这个 SocketChannel 设置为非阻塞模式,并在 Selector 上注册它关注的 I/O 事件。如:OP_WRITER,OP_READ 事件。此时客户端与服务端的 socket 连接正式建立完成。
(4)当客户端通过上面建立好的 socket 连接向服务端发送请求时,服务端的 Selector 会监听到 OP_READ 事件,并触发对应的处理逻辑(read handler)。服务端像客户端发送响应时,服务端的 Selector 可以监听到 OP_WRITER 事件,并触发对应的处理逻辑(writer handler)。
优秀设计之顺序写
优秀设计之跳表、稀松索引、零拷贝
图5 Kafka 存储文件
log 文件里面存储的是消息,index 存储的是索引信息,这两个文件的文件名都是一样的,成对出现的,这个文件名是以 log 文件里的第一条消息的 offset 命名的,如下第一个文件的文件名叫 00000000000012768089,代表着这个文件里的第一个消息的 offset 是 12768089,也就是说第二条消息就是 12768090 了。
这样子,我们想要消费某个大小的 offset,可以根据跳表快速的定位到这个 log 文件了。02 / 稀松索引经过上面的步骤,我们仅仅也就是定位了 log 文件而已,但是要消费的数据具体的物理位置在哪儿?,我们就得靠 kafka 的稀松索引了。假设刚刚我们定位要消费的偏移量是在 00000000000000368769.log 文件里,如果说要整个文件遍历,然后一个 offset 一个 offset 比对,性能肯定很差。这个时候就需要借助刚刚我们看到的 index 文件了,这个文件里面存的就是消息的 offset 和其对应的物理位置,但 index 不是为每条消息都存一条索引信息,而是每隔几条数据才存一条 index 信息,这样 index 文件其实很小,也就是这个原因我们就管这种方式叫稀松索引。
比如现在我们要消费 offset 等于 368776 的消息,如何根据 index 文件定位呢?(1)首先在 index 文件里找,index 文件存储的数据都是成对出现的,比如我们到的 1,0 代表的意思是,offset=368769+1=368770 这条信息存储的物理位置是 0 这个位置。那现在我们现在想要定位的消息是 368776 这条消息,368776 减去 368769 等于 7,我们就在 index 文件里找 offset 等于 7 对应的物理位置,但是因为是稀松索引,我们没找到,不过我们找到了 offset 等于 6 的物理值 1407。(2)接下来就到 log 文件里读取文件的 1407 的位置,然后遍历后面的 offset,很快就可以遍历到 offset 等于 7(368776)的数据了,然后从这儿开始消费即可。03 / 零拷贝
(2)应用程序将数据从内核空间读入用户空间缓冲区;
(3)应用程序将读到数据写回内核空间并放入 socket 缓冲区;
(4)操作系统将数据从 socket 缓冲区复制到网卡接口,此时数据才能通过网络发送。
上图我们发现里面会涉及到两次数据拷贝,Kafka 这儿为了提升性能,所以就采用了零拷贝,零拷贝”只用将磁盘文件的数据复制到页面缓存中一次,然后将数据从页面缓存直接发送到网络中(发送给不同的订阅者时,都可以使用同一个页面缓存),避免了重复复制操作,提升了整个读数据的性能。
优秀设计之批处理
(2)对消息进行序列化(因为涉及到网络传输).
(3)使用分区器进行分区(到这儿就决定了这个消息要被发送到哪儿了).
(4)接着下来这条消息不着急被发送出去,而是被存到缓冲区里.
(5)会有一个 sender 线程,从缓冲区里取数据,把多条数据封装成一个批次,再一把发送出去,因为有了这个批量发送的设计,吞吐量成倍的提升了。
福利
扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!
推荐阅读:
详解GPU技术关键参数和应用场景 什么是数字孪生? 俄罗斯“扎克伯格”:创建区块链版“微信”,27 岁身价达 2.5 亿美元 6 个重要模块,带你编写一个基于Golang的区块链公链demo!| 博文精选
抗住 60 亿次攻击,起底阿里云安全的演进之路 | 问底中国 IT 技术演进
4万程序员学了10万次的课程,今天,曝光背后的讲师!