06 Kafka线上集群部署方案

kafka部署在linux上有什么好处

网络传输效率

kafka部署在linux上,可以用到linux的零拷贝提升网络传输效率,提高kafka的吞吐量。利用零拷贝可以使数据不经过用户态直接通过网卡发送给接收方,实现数据的高性能传输

kafka和零拷贝技术

kafka应用了两个零拷贝技术,sendfile和mmap

sendfile

kafka消息消费过程应用了sendfile,可以查看https://www.jianshu.com/p/0af1b4f1e164这篇文章,讲解了零拷贝对kafka网络传输效率的提升

kafka broker将数据发送到消费者,需要在用户态和内核态之间切换,并且数据需要在用户态和内核态之间拷贝多次,才最终打到网卡,传输给接收方。

linux的零拷贝技术节省了两次拷贝:1.应用程序将数据从内核态的页缓存拷贝到应用空间的应用缓存。2.应用程序将数据从应用缓存拷贝到内核空间的Socket Buffer。

DMA技术:DMA 传输将数据从一个地址空间复制到另外一个地址空间。当CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成。因此通过DMA,硬件则可以绕过CPU,自己去直接访问系统主内存。很多硬件都支持DMA,其中就包括网卡、声卡、磁盘驱动控制器等。

Java中的零拷贝是依靠java.nio.channels.FileChannel中的transferTo(long position, long count, WritableByteChannel target)方法来实现的。transferTo方法的底层实现是基于操作系统的sendfile这个system call来实现的,整个读文件 - 网络发送由一个 sendfile 系统调用完成

mmap

网络数据持久化道磁盘,传统的方式也是要四次copy。在不需要对接收的数据进行处理的情况下,可以节省两次copy:1.应用程序将socket buffer的数据copy到用户空间的应用缓存;2.应用将应用缓存的数据copy到内核空间的页缓存。

Java NIO,提供了一个 MappedByteBuffer 类可以用来实现内存映射。

MappedByteBuffer只能通过调用FileChannel的map()取得,再没有其他方式。

FileChannel.map()是抽象方法,具体实现是在 FileChannelImpl.c 可自行查看JDK源码,其map0()方法就是调用了Linux内核的mmap的API。

参考文章:

https://cloud.tencent.com/developer/news/783592

https://juejin.cn/post/6844903744115736590

linux用户空间和内核空间

用户空间:应用程序可以直接访问的内存区域,用于存放应用的代码和数据,应用程序直接运行在应用空间中。

内核空间:存放内核代码和数据的内存区域,只有内核可以直接访问,内核运行在这个空间。

内核空间和用户空间通过虚拟内存机制进行隔离,分配在不同的虚拟内存区域,这保证了系统的稳定性。

应用程序通过系统接口进行访问内核空间,才能向内核发出指令。内核可以一些机制来访问用户空间,比如复制用户空间的数据。

参考这篇文章:http://www.ruanyifeng.com/blog/2016/12/user_space_vs_kernel_space.html

相关推荐
ask_baidu17 小时前
KafkaUtils
kafka·bigdata
洛豳枭薰18 小时前
消息队列关键问题描述
kafka·rabbitmq·rocketmq
lucky670719 小时前
Spring Boot集成Kafka:最佳实践与详细指南
spring boot·kafka·linq
袁煦丞 cpolar内网穿透实验室20 小时前
远程调试内网 Kafka 不再求运维!cpolar 内网穿透实验室第 791 个成功挑战
运维·分布式·kafka·远程工作·内网穿透·cpolar
岁岁种桃花儿20 小时前
CentOS7 彻底卸载所有JDK/JRE + 重新安装JDK8(实操完整版,解决kafka/jps报错)
java·开发语言·kafka
闻哥1 天前
Kafka高吞吐量核心揭秘:四大技术架构深度解析
java·jvm·面试·kafka·rabbitmq·springboot
indexsunny2 天前
互联网大厂Java面试实战:Spring Boot微服务在电商场景中的应用与挑战
java·spring boot·redis·微服务·kafka·spring security·电商
TTBIGDATA2 天前
【Atlas】Ambari 中 开启 Kerberos + Ranger 后 Atlas Hook 无权限访问 Kafka Topic:ATLAS_HOOK
大数据·kafka·ambari·linq·ranger·knox·bigtop
岁岁种桃花儿2 天前
Kafka从入门到上天系列第一篇:kafka的安装和启动
大数据·中间件·kafka
TTBIGDATA3 天前
【Atlas】Atlas Hook 消费 Kafka 报错:GroupAuthorizationException
hadoop·分布式·kafka·ambari·hdp·linq·ranger