十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Kafka高性能消息系统搭建与调优实战指南

Kafka高性能消息系统搭建与调优实战指南 搞大数据的人不管你是做实时计算、数据湖同步、还是业务消息解耦Kafka基本是绕不开的一环。很多同学一开始接触Kafka装个单机版跑通demo就觉得自己会了结果到了生产环境面对几万甚至几十万的QPS发现消费者消费不过来、延迟飙升、磁盘被打满这时候才明白Kafka真正难的从来不是用起来而是怎么把它调成一套高性能、高可用的消息系统。这篇文章不聊API怎么调、不重复那些入门教程里的producer/consumer示例而是围绕“搭建高性能消息系统”这个核心目标从我自己的实践经验出发把设计思路、核心参数、集群规划、安装部署、监控排障这一整条链路完整过一遍。适合准备做Kafka生产落地的开发同学也适合正在维护Kafka集群但总觉得差点意思的运维人员。文章里所有的配置和参数都是我在实际项目中验证过的你可以直接抄作业但更重要的是理解每一步为什么这么做。1. 整体设计与性能瓶颈拆解1.1 高性能消息系统到底在解决什么问题先搞清楚一件事Kafka在高性能场景下解决的三个核心诉求是吞吐量、延迟、可靠性。这三者不是孤立的关系而是互相牵制的。比如你要求每条消息都同步落盘、每个副本都确认后才返回给生产者那可靠性拉满了但吞吐量一定会下降。反过来如果你只要吞吐不要可靠性那直接把acks设为0、复制因子设为1性能飞起但机器一挂数据就没了。我在实际项目里见过不少团队一上来就追求极致的延迟数字把Kafka调得乱七八糟结果线上丢数据或者堆积严重。做技术选型和调优第一原则永远是先明确你的业务场景到底更看重什么。日志采集、用户行为埋点这类场景追求的是超高吞吐单条消息丢失一点问题不大acks可以放低。订单系统、支付回调这类业务一条都不能丢可靠性优先级最高acks必须all副本数不低于3。实时风控、实时大屏这类场景端到端延迟是核心指标需要从客户端、Broker、网络、消费处理全链路优化。所以说高性能不是盲目地“调大某个参数”而是针对你的场景在三个维度中找到那个最舒服的平衡点。Kafka在大数据生态里的地位本质上就是一套数据中枢。上游各种数据源应用日志、数据库CDC、IoT设备、前端埋点全部接入Kafka下游各种消费者Spark、Flink、数据仓库、搜索引擎从Kafka拉取数据。Kafka的吞吐能力决定了整个数据链路的天花板所以把Kafka搭好其实就是给整个大数据平台打好地基。1.2 Kafka读写性能强的底层原理Kafka的高性能不是黑魔法它的核心设计思想可以拆成几个点来理解。你把这几个点吃透了后面调参的时候就知道每个参数在调什么了。第一个点是顺序写磁盘。机械硬盘的随机写性能惨不忍睹但顺序写性能其实相当可观。Kafka的每个分区都是一个追加日志文件消息进来只做append操作不会随机修改文件内容所以即使是HDD只要数据是顺序写入的吞吐也能到几百MB/s。这一点跟传统消息队列把消息随机写到数据库里、频繁做索引更新的套路完全不同。第二个点是页缓存Page Cache机制。Kafka读写数据不是在用户态直接操作磁盘而是依赖操作系统内核的页缓存。生产者写入数据实际上是写到了页缓存里由操作系统异步刷盘消费者读数据大部分情况下也是直接命中页缓存根本没有真正的磁盘I/O发生。换句话说只要内存足够大Kafka的读写看起来就跟操作内存一样快。第三个点是零拷贝Zero Copy技术。传统消息传输是“磁盘 → 内核缓冲区 → 用户缓冲区 → Socket缓冲区 → 网卡”来回拷好几遍数据浪费CPU还慢。Kafka消费时通过sendfile系统调用让数据直接从页缓存到网卡跳过用户态拷贝极大地降低了I/O开销。这也是Kafka能支持高并发消费的关键之一。第四个点是批量与压缩。Kafka的客户端和Broker在设计上都极度依赖批量操作。生产者端把多条消息攒成一个批次再发出去Broker端按批次存储消费者端按批次拉取。在大批量数据上做LZ4或ZSTD压缩不仅节省网络带宽还能节省磁盘空间整体吞吐往往能提升好几倍。这四个点相互配合才让Kafka能在普通服务器上也能支撑几十万甚至上百万每秒的消息吞吐。1.3 性能瓶颈到底在哪里先学会定位再谈优化很多人在调优之前根本不清楚瓶颈在哪里上来就瞎调参数最后也不知道改了有没有用。我建议把Kafka的性能问题拆成三个层面来看客户端层生产者的ack策略、batch大小、linger时间、压缩算法消费者的拉取频率、处理逻辑复杂度、偏移量提交方式。这一层往往是延迟问题的重灾区因为大多数团队的业务代码写得很差。Broker层磁盘I/O能力、CPU核数、网络带宽、JVM堆大小、分区数量。这一层决定了集群的天花板。操作系统层文件句柄数、虚拟内存设置、脏页回写策略、透明大页是否关闭。这一层容易被忽略但影响很大。定位瓶颈的方法很简单第一步看监控指标第二步做压测验证。不要凭感觉要数据说话。后面我会详细聊监控指标怎么配现在先记住这句话没有压测和监控支撑的调优都是撞运气。2. 核心参数解析与调优实操要点2.1 Broker端参数你的集群基调Broker端参数都在config/server.properties里配置生产环境我通常推荐以下几组关键参数。注意这些参数不需要刻意调得很夸张关键是符合你的业务场景。先看num.network.threads和num.io.threads。前者是网络线程数负责接收客户端请求、把请求放到队列里后者是I/O线程数负责真正处理请求、读写磁盘。默认值分别是3和8对于大部分中小规模集群够用。如果你的机器是32核或更高网络线程可以调到8I/O线程可以调到16左右。但这个参数不是越大越好线程太多反而导致上下文切换开销飙升。我一般在压测时会观察CPU利用率如果I/O线程的CPU使用率已经在80%以上再往上调才有意义。然后是log.segment.bytes和log.retention.hours。日志段默认1GB这个值决定了日志文件滚动的频率也影响了磁盘清理和索引重建的粒度。对于写入量大的集群1GB默认值就挺好不建议调太小否则会产生大量碎片文件。log.retention.hours控制消息保留时间默认168小时7天。我见过不少团队完全不看数据量保留时间设得很长结果磁盘被一天天打满。建议根据业务对历史数据的实际需求来定能存2天就不存7天。log.cleanup.policy和log.retention.bytes这两个参数要配合使用。默认是delete策略按时间或大小删除旧数据。如果你用的是compact策略按key保留最新值那要考虑业务是否真的需要因为compact的运维成本比delete高不少。另外有一个非常关键的参数unclean.leader.election.enable。这个参数默认false表示只有ISR里的副本才有资格被选为leader。但有些人为了高可用把它设成true允许不同步的副本成为leader。这么做确实能减少leader切换时间但是会造成数据丢失。我的建议是业务系统里永远不要开这个参数除非你能接受丢数据。LEO和高水位相关的参数一般保持默认即可不需要动。2.2 生产者与消费者参数性能优化的大头说实话Broker端能调的参数很有限真正拉低集群性能的往往是客户端参数没有配置好。我自己排查过很多线上问题发现80%的延迟和堆积问题都出在客户端。生产者端最重要的参数组合是linger.ms、batch.size和buffer.memory。batch.size默认16KB这是单个批次的大小上限。如果你每条消息就几百字节批次很容易就攒满了可以保持默认。如果你的消息比较大比如十几KB建议把batch.size调到64KB或者更大。linger.ms默认是0意思是消息立即发送不等待更多的消息进入批次。这个默认值对于追求极低延迟的场景是合理的但牺牲了吞吐量。如果你追求高吞吐我建议把linger.ms设置为5-20ms让生产者多攒一会儿数据一次性发出更大的批次。实测下来在网络好、数据量大的场景这个配置能让吞吐提升30%以上。acks参数非常关键。默认值是all也就是所有ISR副本都确认写入后才返回成功。这是最安全的配置也是最慢的。如果你的业务可以接受极端情况下丢少量数据可以把acks设为1这样只要leader写入成功就返回吞吐提升很明显。丢数据的概率并不高因为正常情况下ISR里的副本都跟得上只有leader宕机且副本数据不全时才会有影响。compression.type建议设置为lz4或zstd。开启压缩对吞吐的提升是立竿见影的尤其是日志类文本数据压缩率非常高。我见过一个项目直接开启压缩后网络带宽和磁盘占用都降了一半以上。生产环境我一般首选zstd压缩比高CPU开销可控。消费者端重点看max.poll.records和max.poll.interval.ms这两个参数。max.poll.records默认500意思是每次poll最多返回500条消息。如果你的每条消息处理时间比较长可以减少这个值防止单次poll的数据量太大处理不过来导致rebalance。max.poll.interval.ms默认300秒如果你的consumer处理一条消息要很长时间这个值要适当调大否则超过时间没有再次调用poll消费者会被视为死亡触发rebalance。另外一个必须重视的参数是enable.auto.commit。很多人为了方便让消费者自动提交偏移量结果消息处理到一半抛异常偏移量已经提交了重启后直接跳过一批消息造成数据丢失。生产环境一定要设置为false手动提交偏移量并且保证处理完业务逻辑后再提交。这样虽然麻烦一点但能避免很多那种查不到原因的数据丢失问题。2.3 JVM与操作系统层容易被忽视的性能杀手Kafka跑在JVM上JVM参数和操作系统参数对性能的影响说大不大说小却经常让人头疼。先看JVM堆内存Kafka推荐堆内存设为6GB左右因为Kafka大量使用页缓存Broker进程本身并不需要很大的堆。这里有个很典型的坑有人觉得内存越大越好直接把-Xmx设成30GB结果堆内存频繁GC反而把性能搞崩了。Kafka的很多工作是在操作系统层完成的堆外的页缓存才是性能的关键堆太大反而浪费了系统内存。操作系统层第一件事是关闭透明大页THP。透明大页会导致内存分配延迟增加引发性能抖动。通过echo never /sys/kernel/mm/transparent_hugepage/enabled临时关闭或者写入/etc/rc.local永久关闭。第二是动调vm.swappiness。Kafka建议swappiness设为1让系统尽量避免使用swap因为swap会导致磁盘I/O抖动严重时会让Kafka出现毛刺延迟。同时设置vm.dirty_ratio为60、vm.dirty_background_ratio为5让脏页尽可能多地留在内存里由Kafka异步刷盘提高写入效率。第三是文件句柄数。Kafka在运行过程中会打开大量文件尤其是分区数多的时候文件句柄很容易耗尽。通过ulimit -n设置为至少100000否则你会看到Too many open files的报错。3. 集群规划、部署与工具链选型3.1 集群规模怎么定分区、副本和硬件的计算逻辑很多人问Kafka集群到底要几台机器、多少个分区其实这个问题没有标准答案但有一套清晰的推导逻辑。先算分区数。分区的数量决定了集群的并行度上限但这个上限不是越高越好分区太多会导致Broker端文件句柄过多选举和rebalance的开销也会变大甚至ZooKeeper/KRaft元数据管理都会变慢。我的经验公式是分区总数 峰值吞吐量 / 单个分区可以承受的吞吐量。假设你的业务峰值吞吐是100MB/s实测单个分区在合理配置下能支撑10MB/s的写入那理论分区数就是10。再考虑下游消费者的并行度一般建议分区数不超过消费者总线程数的2-3倍。再算副本因子。生产环境至少3个副本如果是金融、订单类业务副本因子调到3同时设置min.insync.replicas2这样即使一个副本挂了写入还能正常进行。副本越多磁盘占用越大网络开销也越大3副本是成本和可靠性的最佳平衡点。硬件选型方面Kafka是典型的磁盘密集型应用磁盘性能直接决定集群的写入上限。如果你对延迟有要求建议用SSD或者NVMe盘一块企业级SSD的随机写性能足以支撑中小规模集群。如果只是日志场景、追求大容量低成本SATA HDD也可以但一定要保证顺序写因为Kafka对顺序写的依赖决定了HDD的性能也不差。CPU方面Kafka的瓶颈通常在磁盘和网络CPU不是主要瓶颈但压缩、解压和网络线程也要占用CPU8核起步比较合适。内存方面64GB以上内存的机器可以分配6GB给JVM堆剩下全部给操作系统的页缓存。这里有个技巧多给系统留内存比多给JVM堆更有用。3.2 环境准备与安装从下载到内网分发Kafka 3.x之后的版本支持KRaft模式不再依赖ZooKeeper安装和维护简化了不少。但很多公司现有的环境还是基于ZooKeeper的我这里两种都说一下。安装之前先明确Kafka安装包需要提前下载到本地然后分发到集群的所有机器上。如果大家使用的是隔离网络环境或私有化部署没法在每台机器上临时下载那么一定要提前准备好离线包做成内网仓库再分发。这个操作在数据量大的时候特别重要后续要给集群扩容节点时也是一样的流程。官方下载页面提供二进制压缩包解压即可使用。比较推荐的做法是下载带-bin后缀的压缩包因为源码包还需要自己编译。版本号一般建议选择官方维护的主流稳定版本不要追新也不要选太老的版本。大数据生态的兼容性很讲究你选的Kafka版本要跟Flink、Spark等下游组件的主版本匹配否则会出现各种诡异的不兼容问题。安装步骤大致是先装JDK推荐JDK 8或JDK 11然后解压Kafka压缩包配置config/server.properties。单机测试用默认配置就行但要搭建集群需要修改三个关键项broker.id每台机器唯一、log.dirs指定一个空间足够的数据目录、zookeeper.connect指定ZooKeeper集群地址或KRaft的controller地址。如果你想用Docker部署推荐先学一学对应的容器镜像使用方式Kafka官方镜像或开源社区维护的镜像都可以考虑。容器方式适合快速搭建测试环境但生产环境用容器跑Kafka要格外注意数据卷的持久化配置建议确认PVC的磁盘I/O性能满足你的写入需求否则容器调度到性能较差的磁盘上会导致整个集群写入延迟飙升。3.3 高可用部署机房、机架、ISR的配合高可用的目标很简单某个节点挂了集群还能正常服务数据不丢服务不中断。要做到这一点第一是硬件和网络层面的冗余Broker至少三台分别部署在不同的机架或可用区避免单点故障。Kafka支持机架感知rack awareness配置好机架信息后副本会自动分散到不同机架这样即使整个机架断电其他机架上的副本也能接管服务。第二是配置层面的保护措施。min.insync.replicas设为2保证至少两个副本同步成功才返回写入成功。acks设为all保证客户端在极端情况下也不会丢失已确认的消息。同时要配合监控实时关注ISR列表的变化。如果某个副本一直跟不上leader副本会频繁进出ISR这类情况需要重点排查磁盘I/O或网络问题。第三是升级和扩容的操作流程。Kafka集群升级一般建议滚动升级也就是逐台停止、替换、重启确保任意时刻都有足够多的副本在线。小版本升级相对简单替换二进制文件后滚动重启Broker即可大版本升级需要注意协议兼容性先升级服务端再升级客户端确保新旧版本之间可以正常通信。集群扩容节点时新节点加入后不会自动分担数据需要手动执行分区迁移。这个操作不要一次迁移太多分区否则容易压垮网络。3.4 可视化工具选型用顺手的工具管理集群说实话Kafka的命令行工具用起来是真心不方便尤其是分区数据量、消费组消费进度这些信息用命令行一个一个敲命令效率太低。所以我强烈建议给集群配上可视化工具。现在常用的有Kafka UI、Offset Explorer原来的Kafka Tool、Kafka Eagle已更名为EFAK等各有各的侧重点。我在实际项目里最常用的是Kafka UI因为部署简单、界面清爽、功能全面既能看Broker状态、分区详情、消费组进度也支持在线查看消息内容对排查问题特别方便。Offset Explorer适合本地快速连接集群做可视化操作尤其适合Windows桌面端的工程师使用。EFAK的功能更全面支持多集群管理、监控告警甚至可以做审计适合大规模集群的管理场景。不过要注意一点可视化工具有一个通病就是频繁拉取集群元数据会给Broker带来额外的负载。如果是接近满负载的高性能集群别把可视化工具的刷新频率调得太快我一般设置成30秒刷新一次这样既能看到实时数据又不会给集群增加负担。4. 监控体系建设与消息延迟排查4.1 核心监控指标这几个必须盯死没有监控的Kafka集群相当于闭着眼睛开车。现在最常见的监控方案是Kafka Exporter Prometheus Grafana这是一个组合套路Kafka Exporter负责从Kafka集群采集指标Prometheus负责存储和查询Grafana负责可视化展示。在配置监控的时候有几个指标是我建议无论如何都要盯住的UnderReplicatedPartitions副本同步滞后的分区数。这个值如果持续大于0说明有Broker的副本跟不上要么磁盘I/O差要么网络延迟高必须马上排查。OfflinePartitionsleader不在线的分区数。这个值大于0就意味着分区不可用属于严重故障需要立即处理。RequestHandlerAvgIdlePercent请求处理线程的平均空闲率。这个值如果接近0说明I/O线程已经打满是集群能力逼近上限的预警信号。ConsumerLag消费者的消费延迟。这是最直观的业务健康指标Lag一直在增长说明消费速度跟不上生产速度需要扩容消费者或者优化处理逻辑。这些指标配合告警规则能在问题恶化之前就发现苗头。我就遇到过好几次半夜收到的告警信息都是通过ConsumerLag监控发现消费堆积及时扩容消费者避免了凌晨数据积压的灾难。4.2 消息延迟高、消费堆积的排查思路消息延迟高和消费堆积是Kafka群里问得最多的问题也是最能体现实战经验的一类问题。这里我分享一条我常用的排查路径按顺序做基本都能定位到根因。第一步看监控曲线。打开Grafana确认Lag是从哪个时刻开始增长的同时看那个时间段的Broker指标。如果Broker端没有异常大概率不是集群问题而是业务消费速度下降了。第二步看消费者。最常见的坑是消费者处理消息太慢比如每条消息都查一次数据库数据库响应变慢消费就堆积了。还有一种情况是消费者数量少于分区数导致有些分区没有消费者消费Lag只涨不降。确认方法很简单在可视化工具里看每个消费组每个分区的lag分布如果某些分区lag明显高于其他分区基本就是消费并行度的问题。第三步看生产端。如果生产端的batch.size、linger.ms配置不合理消息发送频率不均衡也会导致Broker端接收数据的压力忽高忽低造成消费端周期性的延迟。把生产者端的网络使用率和请求耗时拉出来看通常能发现问题。第四步看Broker的GC情况。Kafka的JVM参数如果配置得不好Full GC频繁会导致Broker在GC期间无法处理请求延迟就会出现周期性尖刺。可以通过jstat -gcutil pid命令观察GC频率和耗时如果Full GC很频繁大概率是堆内存配置不合理或者创建了太多小对象。还有一个容易被忽略的点监控面板上显示的端到端延迟往往包含了客户端重试的时间。如果你的生产者遇到瞬时网络抖动就无限重试延迟数据会被拉得很高。遇到这种情况要去业务日志里看有没有超时和重试的报错而不是只盯监控。4.3 一个真实案例日志堆积的完整排查过程举一个我之前实际遇到的案例。某个数据平台接入Kafka收集业务日志某天晚上日志量突然翻了三倍消费者Lag从几百飙升到几百万业务方疯狂反馈实时报表延迟严重页面数据一直不更新。我当时的排查过程是这样的先看监控Broker端CPU、磁盘I/O、网络都正常排除集群本身的问题。再看ConsumerLag分布发现所有分区都在增长不是某个分区的问题那消费者可能整体处理能力不足。然后看消费者的日志发现消费程序在处理每条日志时都会同步调用一个外部API做数据清洗但当晚那个外部API的响应时间从50ms涨到了2秒直接把消费速度拖垮了。最终解决方案分两步第一步优化消费逻辑把原来同步调外部API改成异步批量调用把外部API的耗时从消费路径上摘掉第二步临时扩容消费者实例让每个实例处理更少的分区快速消化积压的消息。处理完之后Lag在半小时内降到了正常水平数据链路恢复正常。这个案例想说明的是Kafka本身通常不是问题问题往往出在消息的上下游。所以在排查消息延迟问题时不要让目光只停留在Kafka上生产端、消费端、外部依赖都是排查的重点。5. 常见问题高频排查与避坑指南5.1 经典问题速查表我在维护Kafka集群的过程中踩过很多坑这里挑一些高频问题列出来方便大家遇到类似情况时快速定位。现象可能原因解决办法Consumer Lag持续增长消费者数量小于分区数消费逻辑太慢外部API调用延迟高增加消费者实例优化消费逻辑异步化处理外部依赖分区副本一直处于UnderReplicated某个Broker磁盘I/O性能差网络带宽不足检查磁盘健康状态更换性能更好的磁盘检查网络负载消息消费重启后重复消费enable.auto.commit开启导致偏移量未提交完就触发了rebalance改为手动提交偏移量确保处理完消息后再提交生产环境突然大量抛“TimeoutException”网络抖动acksall但有ISR副本不在线请求超时时间过短检查网络和ISR状态适当调大delivery.timeout.ms磁盘被消息日志打满保留时间过长分区太多导致小文件碎片过多缩短保留时间调整清理策略增加磁盘容量消息跨分区顺序错乱同一key的消息发送到了不同分区用支持key路由的Partitioner确保同一key进同一分区消费者频繁rebalancemax.poll.interval.ms太小消费处理时间超时加长该参数减少单次拉取条数降低处理耗时5.2 业务场景扩展Kafka在前端系统通知中的应用很多同学问Kafka是不是只属于大数据场景其实在传统业务系统里Kafka的存在感也很强。比如你经常看到的“消息推送和系统通知”功能在前后端分离架构下后端服务产生的通知数据可以先写入Kafka然后由一个通知处理器消费这些数据推送到WebSocket网关或第三方推送平台再由网关把消息实时推送给前端页面。这个架构的好处是当业务高峰期百万用户同时触发通知时通知服务不会被打挂消息在Kafka里排队通知处理器按照自己的消费能力稳步推进起到了削峰填谷的作用。这套方案和纯同步调用推送接口相比最大的优势是解耦和缓冲。上游业务不需要关心推送是否成功推送服务也不需要跟着业务请求同步阻塞。即使推送平台临时故障消息还在Kafka里恢复后可以继续消费不会丢失。5.3 站在面试视角理解Kafka核心价值考虑到很多读者是准备面试的开发者这里也顺带说几道我在面试中经常问的Kafka相关题目其实就是把Kafka往深里挖“Kafka为什么这么快”这个问题是最高频的答的时候要覆盖顺序写磁盘、页缓存、零拷贝、批量与压缩这几个核心机制最好再结合实际场景说明调优经验展现你不是只会背概念。“如何保证Kafka消息不丢失”可以分三段答生产者端acksall且开启重试Broker端设置min.insync.replicas大于1消费者端手动提交偏移量并保证处理完再提交。“Kafka如何保证消息不重复消费”这个问题和上一个问题要配合回答消费者端要做幂等处理因为Kafka只能保证至少一次语义At Least Once没法完全避免重复消费必须靠业务层去重。“如何提升Kafka的吞吐量”从生产者、消费者、Broker三个层面展开生产者调大batch.size和linger.ms并开启压缩消费者增加实例数和调整拉取批次Broker端增加分区数并优化磁盘配置。这些问题本质上考的是对Kafka底层原理和实战调优的理解深度跟今天文章的核心内容是一脉相承的。如果你把前面的参数、部署、监控、排障都搞清楚了这些题基本都能答得出来。5.4 备份、告警与应急预案最后聊一个很多人不重视但实际很关键的环节。Kafka本身不是严谨的存储系统它的设计目标是消息中间件所以不要指望Kafka里的数据能永久保留。重要的业务数据一定要通过同步机制把Kafka里的数据备份到数据仓库或对象存储里。现在常见的方案就是通过Flink或Canal把Kafka的数据实时同步到HDFS或云存储既满足长期存储的需求也方便后续做离线分析。告警配置也要提前做。除了前面提到的UnderReplicatedPartitions和ConsumerLag建议把Broker的磁盘使用率、JVM的Full GC频率、网络I/O等都纳入告警范围。告警阈值不要设得太敏感否则会产生大量无效告警让团队产生告警疲劳真正出事的时候反而没人看了。我常用的做法是先观察两周的基线数据再根据基线的波动范围设置合理阈值。应急预案方面Kafka集群的常见故障类型其实很固定磁盘满、节点宕机、网络分区、消费堆积、消息丢失。每种故障都要提前准备好操作手册比如磁盘快满了怎么扩容量节点宕机后怎么确认分区是否重新选举leader消费堆积后怎么临时扩容消费者。把预案写好、定期演练线上出故障时才能不慌不忙一步一步处理。从搭建第一套Kafka集群到现在我最大的感受是Kafka这个系统入门容易精通难。它的很多设计理念和参数选择是反直觉的光靠看文档和搜索碎片化的帖子很难形成系统性的理解。希望这篇文章能帮你把这些碎片串起来形成一套自己的知识体系。尤其是那些参数背后的原理和常见的坑真的值得多花时间琢磨生产环境不会跟你开玩笑。
返回列表