总第526篇
2022年 第043篇
-
1. 现状和挑战
-
1.1 现状
-
1.2 挑战
-
2. 读写延迟优化
-
2.1 概览
-
2.2 应用层
-
2.3 系统层
-
2.4 混合层-SSD新缓存架构
-
3. 大规模集群管理优化
-
3.1 隔离策略
-
3.2 全链路监控
-
3.3 服务生命周期管理
-
3.4 TOR容灾
-
4 未来展望
1. 现状和挑战
1.1 现状
1.2 挑战
-
集群负载不均衡会导致局部热点,就是整个集群的磁盘空间很充裕或者ioutil很低,但部分磁盘即将写满或者ioutil打满。
-
PageCache容量,比如说,80GB的PageCache在170MB/s的写入量下仅能缓存8分钟的数据量。那么如果消费的数据是8分钟前的数据,就有可能触发慢速的磁盘访问。
-
Consumer客户端的线程模型缺陷会导致端到端延时指标失真。例如当Consumer消费的多个分区处于同一Broker时,TP90可能小于100ms,但是当多个分区处于不同Broker时,TP90可能会大于1000ms。
-
不同Topic之间会相互影响,个别Topic的流量突增,或者个别消费者的回溯读会影响整体集群的稳定性。
-
Kafka原生的Broker粒度指标不够健全,导致问题定位和根因分析困难。
-
故障感知不及时,处理成本较高。
-
Rack级别的故障会造成部分分区不可用。
2. 读写延迟优化
2.1 概览
-
迁移只能按批次串行提交,每个批次可能存在少量分区迁移缓慢,无法提交下个批次,导致迁移效率受影响。
-
迁移一般在夜间执行,如果迁移拖到了午高峰还未完成,可能会显著影响读写请求。
-
迁移请求和实时拉取存在共用Fetcher线程的问题导致分区迁移请求可能会影响实时消费请求。
2.2 应用层
-
实时读写延迟变高,比如说TP99请求处理时间超过300ms可能会导致实时作业发生消费延迟问题,数据收集拥堵问题等。
-
集群整体利用率不足,虽然集群容量非常充裕,但是部分磁盘已经写满,这个时候甚至会导致某些分区停止服务。
-
生成迁移计划。Rebalancer通过目标磁盘使用率和当前磁盘使用率(通过Kafka Monitor上报)持续生成具体的分区迁移计划。
-
提交迁移计划。Rebalancer向Zookeeper的Reassign节点提交刚才生成的迁移计划,Kafka的Controller收到这个Reassign事件之后会向整个Kafka Broker集群提交Reassign事件。
-
检查迁移计划。Kafka Broker负责具体执行数据迁移任务,Rebalancer负责检查任务进展。
-
采取流水线加速策略优化迁移缓慢引起的迁移效率问题。
-
支持迁移取消解决长尾分区迁移缓慢引起的读写请求受影响问题。
-
采取Fetcher隔离缓解数据迁移请求和实时读写请求共用Fetcher线程的问题。
2.3 系统层
2.4 混合层-SSD新缓存架构
-
首先新的缓存架构会将Log内的多个Segment按时间维度存储在不同的存储设备上,如图2-14中的红圈1,新缓存架构数据会有三种典型状态,一种叫Only Cache,指的是数据刚写进SSD,还未同步到HDD上;第2个是Cached,指数据既同步到了HDD也有一部分缓存在SSD上;第三种类型叫WithoutCache,指的是同步到了HDD但是SSD中已经没有缓存了。
-
然后后台异步线程持续地将SSD数据同步到HDD上。
-
随着SSD的持续写入,当存储空间达到阈值后,会按时间顺序删除距当前时间最久的数据,因为SSD的数据空间有限。
-
副本可根据可用性要求灵活开启是否写入SSD。
-
从HDD读取的数据是不会回刷到SSD上的,防止缓存污染。
-
首先是关于日志段同步,就是刚才说到的Segment,只同步Inactive的日志段,Inactive指的是现在并没有在写的日志段,低成本解决数据一致性问题。
-
其次是做同步限速优化,在SSD向HDD同步时是需要限速的,同时保护了两种设备,不会影响其他IO请求的处理。
3. 大规模集群管理优化
3.1 隔离策略
-
第一点是业务隔离,如图3-1所示,每一个大的业务会有一个独立的Kafka集群,比如外卖、到店、优选。
-
第二点是分角色隔离,这里Kafka的Broker和Controller以及它们依赖的组件Zookeeper是部署在不同机器上的,避免之间相互影响。
-
第三点是分优先级,有的业务Topic可用性等级特别高,那么我们就可以给它划分到VIP集群,给它更多的资源冗余去保证其可用性。
3.2 全链路监控
-
Broker端延时指标无法及时反应用户问题。
-
随着请求量的增长,Kafka当前提供的Broker端粒度的TP99甚至TP999延时指标都可能无法反应长尾延时。 -
Broker端的延时指标不是端到端指标,可能无法反应用户的真实问题。 -
故障感知和处理不及时。
3.3 服务生命周期管理
-
状态语义存在歧义,无法真实反映系统状态,往往需要借助日志和指标去找到真实系统是否健康或者异常。
-
状态不全面,异常Case需人工介入处理,误操作风险极大。
3.4 TOR容灾
4 未来展望
5 作者简介
本文转载自美团技术团队,原文链接:https://mp.weixin.qq.com/s/waVLtusovUkVDt7rKCcdDg。