Kafka 核心技术与实战
胡夕
Apache Kafka Committer,老虎证券技术总监
52815 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
开篇词 (1讲)
结束语 (1讲)
Kafka 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

06 | Kafka线上集群部署方案怎么做?

带宽
磁盘容量
磁盘
操作系统
Kafka线上集群部署方案

该思维导图由 AI 生成,仅供参考

专栏前面几期内容,我分别从 Kafka 的定位、版本的变迁以及功能的演进等几个方面循序渐进地梳理了 Apache Kafka 的发展脉络。通过这些内容,我希望你能清晰地了解 Kafka 是用来做什么的,以及在实际生产环境中该如何选择 Kafka 版本,更快地帮助你入门 Kafka。
现在我们就来看看在生产环境中的 Kafka 集群方案该怎么做。既然是集群,那必然就要有多个 Kafka 节点机器,因为只有单台机器构成的 Kafka 伪集群只能用于日常测试之用,根本无法满足实际的线上生产需求。而真正的线上环境需要仔细地考量各种因素,结合自身的业务需求而制定。下面我就分别从操作系统、磁盘、磁盘容量和带宽等方面来讨论一下。

操作系统

首先我们先看看要把 Kafka 安装到什么操作系统上。说起操作系统,可能你会问 Kafka 不是 JVM 系的大数据框架吗?Java 又是跨平台的语言,把 Kafka 安装到不同的操作系统上会有什么区别吗?其实区别相当大!
的确,如你所知,Kafka 由 Scala 语言和 Java 语言编写而成,编译之后的源代码就是普通的“.class”文件。本来部署到哪个操作系统应该都是一样的,但是不同操作系统的差异还是给 Kafka 集群带来了相当大的影响。目前常见的操作系统有 3 种:Linux、Windows 和 macOS。应该说部署在 Linux 上的生产环境是最多的,也有一些 Kafka 集群部署在 Windows 服务器上。Mac 虽然也有 macOS Server,但是我怀疑是否有人(特别是国内用户)真的把生产环境部署在 Mac 服务器上。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了在生产环境中部署Kafka集群的方案选择和规划。首先,针对操作系统的选择,Linux系统被认为更适合部署Kafka,因其在I/O模型、网络传输效率和社区支持度方面具有优势。其次,对于磁盘的选择,建议使用普通机械硬盘,因为Kafka大量使用的是顺序读写操作,规避了机械磁盘的劣势。此外,对于磁盘容量的规划,文章提供了详细的计算方法和考量因素,帮助读者根据业务需求合理规划Kafka集群的存储空间。另外,文章还深入讨论了带宽资源的规划,指出带宽特别容易成为Kafka性能问题的瓶颈,并提供了实际例子和计算方法,帮助读者评估线上环境的服务器台数。总的来说,本文通过深入浅出的方式,为读者提供了在生产环境中部署Kafka集群的实用指南,涵盖了技术细节和实际操作,对于需要了解Kafka集群部署方案的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Kafka 核心技术与实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(110)

  • 最新
  • 精选
  • mickle
    置顶
    1000*1000/(60*60)=277,这个2336MB是怎么换算来的,还有什么要考虑的吗?

    作者回复: 277MB,乘以8,大致等于2300+Mb(小b)。带宽资源一般用Mbps而不是MBps衡量

    2019-06-15
    10
    106
  • A_NATE_👻
    我们曾经也认为用普通硬盘就行,换成普通硬盘导致生产者堵塞写入负载偏高,换成SSD就没事了,我们每天消息数大概50亿。

    作者回复: 嗯嗯,专栏里面只是给出一个评估的方法。具体还要结合自己的实际情况来调整。通常我们认为SSD的顺序写TPS大约是HDD的4倍。除了纵向扩展使用SSD之外,也可以尝试一下横向扩展,增加更多的broker或HDD分散负载:)

    2019-06-15
    8
    67
  • 蒙开强
    老师,你好,你讲的这几个纬度很好,之前我们搭建一套kafka集群就不知道怎么去衡量,我再问一个相关问题,我个人觉得kafka会出现丢数据情况,比如某个分区的leader挂了,在切换选举到另外副本为leader时,这个副本还没同步之前的leader数据,这样数据就丢了

    作者回复: 嗯嗯,对于producer而言,如果在乎数据持久性,那么应该设置acks=all,这样当出现你说的这个情况时,producer会被显式通知消息发送失败,从而可以重试。

    2019-06-17
    4
    51
  • WL
    有三个问题请教一下老师: 1. 上文提到对于千兆网卡kafka服务器最多使用700M的带宽资源, 这700M的资源是单机使用的还是集群共用的, 为什么不能作为常规使用呢? 2. 文章举例是1小时1T的数据处理目标, 那一秒中是不是1024/3600 = 0.284G = 285M, 请问下文章中的2336M是咋算出来的. 3. 文章中的例子kafka单机要达到240M的读写能力, CPU应该配几核的?

    作者回复: 1. 这个700Mb只是经验值罢了。另外预留buffer的意思是即使你最好不要让broker常规占用700Mb的资源。一旦碰到峰值流量,很容易将带宽打满。故做了一些资源预留 2. 285M是大B,即字节啊,乘以8之后就是2336Mb。带宽资源一般用Mbps而非MBps衡量 3. 我没有谈及CPU,是因为通常情况下Kafka不太占用CPU,因此没有这方面的最佳实践出来。但有些情况下Kafka broker是很耗CPU的:1. server和client使用了不同的压缩算法;2. server和client版本不一致造成消息格式转换;3. broker端解压缩校验 其中前两个都能规避,第三个目前无法规避。不过相比带宽资源,CPU通常都不是瓶颈

    2019-06-15
    33
  • 李跃爱学习
    老师希望解答一下,之前也说明了Kafka 机器上没有混布其他服务,为什么常规需要预留2/3,只能跑240Mbps,

    作者回复: 为follower拉取留一些带宽

    2019-07-16
    16
    30
  • 墙角儿的花
    弱弱的问一句老师,“根据这个目标,我们每秒需要处理 2336Mb 的数据,除以 240,约等于 10 台服务器”,机房入口带宽1Gbps,怎么能做到1秒处理2336Mb的数据的

    作者回复: 这里是指单机带宽,机房总带宽不可能这么小的。。。

    2019-06-15
    4
    20
  • Geek_Sue
    胡老师,您好,我想请问下,我们公司的环境是基于Docker这种微服务架构,那么kafka部署在Docker容器中部署方案是否会有一些不同呢?

    作者回复: 目前社区对Docker方案支持的并不是太好,主要都是一些第三方公司还有Confluent公司在提供解决方案。在Docker上部署我个人觉得没有太大的不同,只是注意带宽资源吧,因为常见的做法都是买一台性能超强的服务器然后在上面启动多个Docker容器,虽然CPU、RAM、磁盘都能承受,但单机还是受限于带宽的。

    2019-06-17
    2
    18
  • 疯琴
    老师,partitons的数量和硬盘的数量有匹配关系么?一块盘一个partiton比一块盘多个partiton要快么?是线性的关系么?

    作者回复: 没有具体的关系。 “一块盘一个partiton比一块盘多个partiton要快么?” 没有实验数据支撑,单纯从分析角度来看我是认同的。当某块磁盘上有太多的分区时引入了很多随机IO拖慢了性能。事实上,阿里的RocketMQ一直宣称当单磁盘超过256分区时Kafka性能不如RocketMQ,原因也在于此。 数据来源:http://jm.taobao.org/2016/04/07/kafka-vs-rocketmq-topic-amout/

    2019-06-17
    3
    16
  • 南辕北辙
    这个假设是:follower与leader处于不同的broker而实际环境中不推荐单机多broker的架构 摘自老师回复其他同学。 老师这个的意思是不是生产上的架构通常一台服务器上只会有leader或者follow的分区,而不会二者存在一台服务器上,所以根据带宽计算服务器数量时,根据备份数为2,所以就直接✖️3了。

    作者回复: Leader副本和Follower副本必然在不同的Broker上,而生产环境一般也不推荐将多台Broker混布到同一台服务器上。当然服务器性能强劲的话也未尝不可:)

    2019-06-17
    11
  • Royal
    您好,我想请教下kafka metric相关的知识,比如kafka produce速率获取等

    作者回复: kafka producer速率可以监控这个JMX指标: kafka.producer:type=[consumer|producer|connect]-node-metrics,client-id=([-.\w]+),node-id=([0-9]+)

    2019-06-15
    2
    11
收起评论
显示
设置
留言
99+
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部