06 | Kafka线上集群部署方案怎么做?
06 | Kafka线上集群部署方案怎么做?
讲述:胡夕
时长12:05大小9.68M
操作系统
磁盘
磁盘容量
带宽
小结
开放讨论
赞 52
提建议
精选留言(105)
- mickle置顶2019-06-151000*1000/(60*60)=277,这个2336MB是怎么换算来的,还有什么要考虑的吗?
作者回复: 277MB,乘以8,大致等于2300+Mb(小b)。带宽资源一般用Mbps而不是MBps衡量
共 9 条评论102 - A_NATE_👻2019-06-15我们曾经也认为用普通硬盘就行,换成普通硬盘导致生产者堵塞写入负载偏高,换成SSD就没事了,我们每天消息数大概50亿。
作者回复: 嗯嗯,专栏里面只是给出一个评估的方法。具体还要结合自己的实际情况来调整。通常我们认为SSD的顺序写TPS大约是HDD的4倍。除了纵向扩展使用SSD之外,也可以尝试一下横向扩展,增加更多的broker或HDD分散负载:)
共 8 条评论62 - 蒙开强2019-06-17老师,你好,你讲的这几个纬度很好,之前我们搭建一套kafka集群就不知道怎么去衡量,我再问一个相关问题,我个人觉得kafka会出现丢数据情况,比如某个分区的leader挂了,在切换选举到另外副本为leader时,这个副本还没同步之前的leader数据,这样数据就丢了
作者回复: 嗯嗯,对于producer而言,如果在乎数据持久性,那么应该设置acks=all,这样当出现你说的这个情况时,producer会被显式通知消息发送失败,从而可以重试。
47 - WL2019-06-15有三个问题请教一下老师: 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通常都不是瓶颈
32 - 李跃爱学习2019-07-16老师希望解答一下,之前也说明了Kafka 机器上没有混布其他服务,为什么常规需要预留2/3,只能跑240Mbps,
作者回复: 为follower拉取留一些带宽
共 9 条评论27 - Geek_Sue2019-06-17胡老师,您好,我想请问下,我们公司的环境是基于Docker这种微服务架构,那么kafka部署在Docker容器中部署方案是否会有一些不同呢?
作者回复: 目前社区对Docker方案支持的并不是太好,主要都是一些第三方公司还有Confluent公司在提供解决方案。在Docker上部署我个人觉得没有太大的不同,只是注意带宽资源吧,因为常见的做法都是买一台性能超强的服务器然后在上面启动多个Docker容器,虽然CPU、RAM、磁盘都能承受,但单机还是受限于带宽的。
18 - 墙角儿的花2019-06-15弱弱的问一句老师,“根据这个目标,我们每秒需要处理 2336Mb 的数据,除以 240,约等于 10 台服务器”,机房入口带宽1Gbps,怎么能做到1秒处理2336Mb的数据的
作者回复: 这里是指单机带宽,机房总带宽不可能这么小的。。。
共 4 条评论16 - 疯琴2019-06-17老师,partitons的数量和硬盘的数量有匹配关系么?一块盘一个partiton比一块盘多个partiton要快么?是线性的关系么?
作者回复: 没有具体的关系。 “一块盘一个partiton比一块盘多个partiton要快么?” 没有实验数据支撑,单纯从分析角度来看我是认同的。当某块磁盘上有太多的分区时引入了很多随机IO拖慢了性能。事实上,阿里的RocketMQ一直宣称当单磁盘超过256分区时Kafka性能不如RocketMQ,原因也在于此。 数据来源:http://jm.taobao.org/2016/04/07/kafka-vs-rocketmq-topic-amout/
14 - 南辕北辙2019-06-17这个假设是:follower与leader处于不同的broker而实际环境中不推荐单机多broker的架构 摘自老师回复其他同学。 老师这个的意思是不是生产上的架构通常一台服务器上只会有leader或者follow的分区,而不会二者存在一台服务器上,所以根据带宽计算服务器数量时,根据备份数为2,所以就直接✖️3了。
作者回复: Leader副本和Follower副本必然在不同的Broker上,而生产环境一般也不推荐将多台Broker混布到同一台服务器上。当然服务器性能强劲的话也未尝不可:)
10 - Royal2019-06-15您好,我想请教下kafka metric相关的知识,比如kafka produce速率获取等
作者回复: kafka producer速率可以监控这个JMX指标: kafka.producer:type=[consumer|producer|connect]-node-metrics,client-id=([-.\w]+),node-id=([0-9]+)
共 2 条评论11 - 黄智荣2019-06-18老师您好,我们现在用的网络是10Gb,的万兆网.这样主要性能瓶性可会在硬盘IO上,我们配置了24坏的sas 机械盘。 刚才老师主要从容量跟网络性能,评估集群的规模。 我想问一下,怎么从硬盘的IO性能,去评估集群的规模? 还有做6个盘组成一个raid5,比直接用裸盘,性能会有多大的损失?
作者回复: RAID-5具体有多少性能损失不好说,但肯定会有的,最好还是以测试结果为准。另外咱们是否可以更多地利用Kafka在软件层面提供的高可靠性来保证数据完整性呢?不用单纯依赖于硬件。 至于评估方法,磁盘要相对复杂一些。毕竟当topic数量很多的时候磁盘不一定都是顺序写。不过你姑且可以做这样的测试:做一个单partition的topic,测试一下该topic对应的TPS,然后用你磁盘的TPS去核算单块磁盘上大概能放多少个partition。
共 2 条评论8 - Eagles2019-06-17老师你好,Leader Follower 之间的数据冗余复制会不会占带宽?如果占带宽且有两个以上的follows,岂不是把预留的2/3的带宽全部用掉了。
作者回复: 会占带宽的,这也是预留的部分之一,就是给非业务活动留的带宽资源,包括操作系统其他进程消耗的带宽啊。
8 - CDz2020-01-16系统选择:Linux为主 原因: * 社区支持 * IO模型 * kafka底层是使用Java的NIO,在Linux在Java默认是用的epoll实现相比select更高效 * 数据传输 * Linux环境下JavaNIO使用零拷贝技术(zero copy) * Win环境下只有在Java8 后面版本才支持 磁盘: 使用机械硬盘还是SSD? 因为kafka更多的是顺序读写,很大程度上避免了机械硬盘的随机读写慢问题。所以在数据量不多的情况下,使用机械硬盘物美价廉 机械硬盘是否需要RAID? 综合考虑,数据量并不是特别大的情况下,并不需要,因为kafka本身有集群备份的功能。 磁盘容量需要多大? 一般默认消息保存两周,根据自己的实际每天消息数量,进行换算。换算时留出10%的磁盘空间即可。 考虑点: * 每日消息量、消息大小 * 保存时间 * 备份数量 * 是否开启压缩(消耗CPU) 宽带: 网络宽带单位与磁盘存储单位是什么关系? 存储单位一般使用的字节(Byte)为基本单位,数据传输大多使用的是“位”(bit) 1Byte = 8bit 所以换算下来,平时说的1Gbps的网络实际速度为: 1Gbps = 1024Mb(位)/8=128MB(字节)/s; Over;展开7
- Nero2019-06-15好了,有了 240Mbps,我们就可以计算 1 小时内处理 1TB 数据所需的服务器数量了。根据这个目标,我们每秒需要处理 2336Mb 的数据, 老师这一段中2334Mb是怎么算出来的,没看懂,能否解释一下,谢谢。
作者回复: 1024*1024/3600*8
共 4 条评论7 - 疯琴2019-06-17老师,如果单机起多个broker是否有可能造成同一个partition的多个副本在一台机器上,损失了容灾能力?
作者回复: 是的,有这个可能。现在的分布式集群都倾向于使用普通性能的机器搭建,因此单台单Broker性价比很高的。 当然我也知道很多公司采购了超强的服务器,然后在上面跑多个实例。这么做的原因是因为机器价格其实很便宜,贵的是IDC机架位(至少在北京是这样),因此两个方案都有自己合理的地方吧。
6 - QQ怪2019-06-15老师尽然把我模糊不清的GB和Gb的区别给复习了一遍😂共 1 条评论5
- 坤蛰2019-06-15您好!我在使用Kafka中,出现消息阻塞不消费的问题,换了消费组之后过段时间又不消费了,不知什么原因,望老师解惑。谢谢!
作者回复: 两个可能的原因,①就是没有新消息可供消费了,②某天消息格式有问题导致解析不了了,不过这种情况很罕见,一般是因为网络传输出问题导致
5 - Joe Black2020-05-01发现问的最多的竟然是Byte和Bit的问题...我们用的40Gb的网络,服务器内存290多G,24块万转SAS盘,按老师说的,几十台这样的服务器可以处理很大规模的数据量了吧,都不用怎么规划…
作者回复: 很多公司的机器没有这么强劲的性能......
4 - 浮石沉木2020-10-13带宽、磁盘单位问题看这个: https://www.cnblogs.com/linckle/archive/2007/12/03/981396.html3
- 漩涡鸣人2020-03-18老师您好,我遇到一个场景 kafka数据 网络丢包会不会 导致json 字段丢失。比如 {姓名,年龄,生日,{其他信息} } 嵌套的其他信息数据丢失变成null
作者回复: 说实话感觉不像是Kafka的问题,有可能是序列化/反序列化的问题。
共 4 条评论3