注册 / 登录

以Kafka为例的大规模有状态集群优化方法探索

分会场:  质量管理/智能运维/DevOps

分享时间: 2017年11月9日 - 12日

案例来源 :

案例讲师

秦江杰

LinkedIn Staff Software Engineer

LinkedIn 数据基础架构部门 Kafka 组软件工程师。Apache Kafka项目PMC Member。2014 年硕士毕业于卡耐基梅陇大学信息网络专业,随后加入LinkedIn Kafka组。秦江杰目前是 LinkedIn 的 Kafka 生态平台设计和开发的主要参与者,主导了包括 Kafka Cruise Control,likafka-clients 等多个 Kafka 相关项目的架构设计和整合。

扫描二维码分享案例

 

案例简述

 

对于分布式系统的动态负载均衡和自我管理始终是一个不太容易解决的问题。现有的大多数解决方法大多是迁移整个应用进程来实现硬件资源的负载均衡,这也是容器化的一个重要用途。这种资源均衡的方法对无状态应用较为适用,但是对于有状态集群(例如Kafka)并不十分有效。主要原因在于迁移应用意味着大量状态的迁移,这是一个漫长又昂贵的过程。在LinkedIn,为了解决这一问题,我们开发了Cruise Control,其主要特点是可以根据应用的特点进行部分状态的迁移。为了保证迁移的效率和效果,我们使用了监控-分析-迁移的环路。在整个过程中,Cruise Control对于Kafka是有感知的,所以动态负载均衡的过程对Kafka可以进行优化。不仅如此,Cruise Control还为Kafka提供了自愈功能。 当一个Kafka代理失效时,Cruise Control会自动将失效节点上的拷贝迁移到健康节点上,从而防止长时间冗余丢失。

关于Cruise Control的更详细信息可以参见LinkedIn Engineering的blog post(https://engineering.linkedin.com/blog/2017/08/open-sourcing-kafka-cruise-control)

 

案例目标

 

Kafka集群在LinkedIn的部署规模越来越大,对运维造成了极大压力,亟需一个自动运维的解决方案。该方案需要完成如下功能:
1. 对集群进行可用性管理(Rack Awareness)
2. 对集群负载进行多资源负载均衡(CPU,网络,磁盘)
3. 提供人工运维的接口(增加,删除节点等)
4. 在Kafka代理失效时保证数据冗余性。(迁移失效节点上的数据拷贝)
5. 提供细颗粒度的负载查询(对每个Kafka Partition进行负载建模)

 

成功(或教训)要点

 

1. 对于系统负载建模的准确性是负载均衡方案成功的基础。
2. 有状态集群的负载均衡需要考虑负载均衡时的开销。
3. 多目标负载均衡的一般求解复杂度相当大,使用启发式算法可以大大缩短球姐时间并在大多数情况下获得可接受的效果。
4. 灵活的优化目标设定。
5. 在优化方案计算速度和资源消耗方面的平衡。

 

案例ROI分析

 

自动运维工具的开发对于降低运维成本增加系统可靠性而言至关重要。自动运维工具的部署可以使系统运维成本在部署规模增加的情况下不产生额外的运维成本。

 

案例启示

 

1. 对于有状态集群的负载均衡,部分状态迁移是更为有效的方式。
2. 建立合适的负载模型对进行较细颗粒度的负载分析至关重要。