Kafka核心技术与实战
胡夕
人人贷计算平台部总监,Apache Kafka Contributor
立即订阅
8408 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 为什么要学习Kafka?
免费
Kafka入门 (5讲)
01 | 消息引擎系统ABC
02 | 一篇文章带你快速搞定Kafka术语
03 | Kafka只是消息引擎系统吗?
04 | 我应该选择哪种Kafka?
05 | 聊聊Kafka的版本号
Kafka的基本使用 (3讲)
06 | Kafka线上集群部署方案怎么做?
07 | 最最最重要的集群参数配置(上)
08 | 最最最重要的集群参数配置(下)
客户端实践及原理剖析 (14讲)
09 | 生产者消息分区机制原理剖析
10 | 生产者压缩算法面面观
11 | 无消息丢失配置怎么实现?
12 | 客户端都有哪些不常见但是很高级的功能?
13 | Java生产者是如何管理TCP连接的?
14 | 幂等生产者和事务生产者是一回事吗?
15 | 消费者组到底是什么?
16 | 揭开神秘的“位移主题”面纱
17 | 消费者组重平衡能避免吗?
18 | Kafka中位移提交那些事儿
19 | CommitFailedException异常怎么处理?
20 | 多线程开发消费者实例
21 | Java 消费者是如何管理TCP连接的?
22 | 消费者组消费进度监控都怎么实现?
深入Kafka内核 (5讲)
23 | Kafka副本机制详解
24 | 请求是怎么被处理的?
25 | 消费者组重平衡全流程解析
26 | 你一定不能错过的Kafka控制器
27 | 关于高水位和Leader Epoch的讨论
管理与监控 (12讲)
28 | 主题管理知多少?
29 | Kafka动态配置了解下?
30 | 怎么重设消费者组位移?
31 | 常见工具脚本大汇总
32 | KafkaAdminClient:Kafka的运维利器
33 | Kafka认证机制用哪家?
34 | 云环境下的授权该怎么做?
35 | 跨集群备份解决方案MirrorMaker
36 | 你应该怎么监控Kafka?
37 | 主流的Kafka监控框架
38 | 调优Kafka,你做到了吗?
39 | 从0搭建基于Kafka的企业级实时日志流处理平台
高级Kafka应用之流处理 (3讲)
40 | Kafka Streams与其他流处理平台的差异在哪里?
41 | Kafka Streams DSL开发实例
42 | Kafka Streams在金融领域的应用
结束语 (1讲)
结束语 | 以梦为马,莫负韶华!
特别放送 (2讲)
加餐 | 搭建开发环境、阅读源码方法、经典学习资料大揭秘
用户故事 | 黄云:行百里者半九十
Kafka核心技术与实战
登录|注册

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

胡夕 2019-06-15
专栏前面几期内容,我分别从 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/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Kafka核心技术与实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(63)

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

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

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

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

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

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

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

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

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

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

    2019-06-17
    6
  • Nero
    好了,有了 240Mbps,我们就可以计算 1 小时内处理 1TB 数据所需的服务器数量了。根据这个目标,我们每秒需要处理 2336Mb 的数据, 老师这一段中2334Mb是怎么算出来的,没看懂,能否解释一下,谢谢。

    作者回复: 1024*1024/3600*8

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

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

    2019-06-15
    1
    4
  • 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
    3
  • 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
    1
    3
  • 黄楚门的世界
    老师您好,我们现在用的网络是10Gb,的万兆网.这样主要性能瓶性可会在硬盘IO上,我们配置了24坏的sas 机械盘。
    刚才老师主要从容量跟网络性能,评估集群的规模。
    我想问一下,怎么从硬盘的IO性能,去评估集群的规模?
    还有做6个盘组成一个raid5,比直接用裸盘,性能会有多大的损失?

    作者回复: RAID-5具体有多少性能损失不好说,但肯定会有的,最好还是以测试结果为准。另外咱们是否可以更多地利用Kafka在软件层面提供的高可靠性来保证数据完整性呢?不用单纯依赖于硬件。

    至于评估方法,磁盘要相对复杂一些。毕竟当topic数量很多的时候磁盘不一定都是顺序写。不过你姑且可以做这样的测试:做一个单partition的topic,测试一下该topic对应的TPS,然后用你磁盘的TPS去核算单块磁盘上大概能放多少个partition。

    2019-06-18
    1
    2
  • 疯琴
    老师,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
    2
  • Eagles
    老师你好,Leader Follower 之间的数据冗余复制会不会占带宽?如果占带宽且有两个以上的follows,岂不是把预留的2/3的带宽全部用掉了。

    作者回复: 会占带宽的,这也是预留的部分之一,就是给非业务活动留的带宽资源,包括操作系统其他进程消耗的带宽啊。

    2019-06-17
    2
  • 小头针
    在生产环境,实时推送过来的数据一份是直接存储到oracle,一份是接收后写入到kafka 对应的topic,storm程序消费后写入到kafka和elasticsearch ,经常会出现当天的oracle存储数据和elasticsearch存储的数据量有差异,有时候能差异率达到15%,胡老师这里面是否有带宽的原因呢?

    作者回复: 不一定是带宽这么底层的问题,更像是Storm流处理的不正确导致的。Storm+Kafka要实现端到端的精确一次处理语义可谓是非常的难。事实上, 其他流处理框架也不敢保证百分之百的正确性。

    2019-06-16
    1
    2
  • QQ怪
    老师尽然把我模糊不清的GB和Gb的区别给复习了一遍😂
    2019-06-15
    1
    2
  • 夜影如歌
    1亿条消息保存两份,是指一个leader一个副本吧

    作者回复: 嗯嗯,是的。其实leader也是副本,副本有两类:leader和follower

    2019-10-18
    1
  • Geek_b809ff
    老师,请问一直报这个错是因为什么:
     Error while fetching metadata with correlation id 101 : {test=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)

    另外,server.properties里面下面这几个参数应该怎么配置:
    listeners=PLAINTEXT://:9092
    advertised.listeners=PLAINTEXT://:9092
    istener.security.protocol.map

    老师看到帮忙回复下,困扰一天了

    作者回复: 你的主题test创建出了吗

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

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

    2019-07-16
    1
  • Bin滨
    “根据这个目标,我们每秒需要处理 2336Mb 的数据,除以 240,约等于 10 台服务器, 如果消息还需要额外复制两份,那么总的服务器台数还要乘以 3,即 30 台。

    请问一下, 这里说的30台服务器是指 10 个kafka cluster, 每个cluster 有3 brokers? 消息写道leader broker 的topic partition 上, 然后用参数 replication.factor 去做topic的消息备份吗? 多谢!


    作者回复: 是指30台broker的意思:)

    2019-06-19
    1
  • 疯琴
    老师,如果单机起多个broker是否有可能造成同一个partition的多个副本在一台机器上,损失了容灾能力?

    作者回复: 是的,有这个可能。现在的分布式集群都倾向于使用普通性能的机器搭建,因此单台单Broker性价比很高的。

    当然我也知道很多公司采购了超强的服务器,然后在上面跑多个实例。这么做的原因是因为机器价格其实很便宜,贵的是IDC机架位(至少在北京是这样),因此两个方案都有自己合理的地方吧。

    2019-06-17
    1
  • AF
    感觉有几个知识盲点:I/O模型、零拷贝和RAID。
    2019-06-16
    1
收起评论
63
返回
顶部