kafka

滴滴kafka大数据应用

2021-01-15  本文已影响0人  夜风月圆

滴滴内部统一使用 kafka 作为大数据的数据通道,当前滴滴共有几十个 kafka 集群,450+ 的节点,20k+ 的 kafka topic,每天2w亿+的消息量;每周500+UV用户,需要完成 topic 创建、申请、指标查看等操作;每天运维人员还有大量集群、topic运维操作。因此我们需要构建一个Kafka的管控平台来承载这些需求。

在平台建设的初期,我们调研了社区同类产品的使用情况,在调研中发现,外部同类产品无论在监控指标的完善程度、运维管控的能力亦或是使用的体验、还是整体的安全管控上都无法很好的满足我们的需求,因此自建滴滴 kafka 云管控平台势在必行。

经过前期产品同学的反复调研和设计、中期研发同学高质量的实现、后期针对用户体验反馈的持续迭代,kafka 云平台上线后广受内部用户和运维人员的好评,使用满意度达到90分。与此同时,还进行了开源(https://github.com/didi/Logi-KafkaManager)和商业化输出,并被多家企业用户成功采购。

免费体验地址:http://117.51.150.133:8080/kafka ,账户admin/admin。

***1. ***

需求分析

图片

在 Kafka 云平台建设的初期,我们对之前所面临的问题和需求进行了归纳分析,主要有以下几点:

由于绝大多数用户使用的kafka topic 都会由公共集群来承载数据的生产和消费,而当前 kafka 引擎在 topic 级别的安全管控手段较为薄弱,任何人只要知道kafka集群地址和相应的topic便可进行消费。这无疑会造成数据泄漏的安全风险,因此数据的安全性成首要被解决的问题。

滴滴内部绝大部分的 topic 是在共享集群上,共享集群下多 topic 之间存在着相互影响的问题。如某个 topic 的流量突增可能会大面积地影响其他 topic ,从而导致业务的抖动和集群的不稳定。因此在共享集群下,kafka 服务的稳定性也成为了一个必须被解决的问题。

滴滴内部每周有大量的用户需要进行 topic 的创建、消费、扩partiton、指标查看等操作,用户高频使用的功能需要做的足够的友好和容易上手,这样才能最大的简化用户的操作和减低日常开发和运维人员的答疑成本。因此用户高频操作的平台化支撑,则成为接下来需要解决的问题。

在日常使用 kafka topic 的过程中,会有大量的问题需要查看和定位,如:消息生产和消费的速度、消息堆积的程度、partition的均匀度、topic的分布信息、broker的负载信息、副本的同步信息等,如何使用户和运维人员快速高效的定位问题、处理问题,是重点需要解决的问题。

在日常的运维中,会存在着大量的集群、topic的运维操作,如:集群的部署、升级、扩缩容、topic的迁移、leader rebalance等高频高危的操作,怎么样在提升运维操作效率的同时,还要保证高危操作不会影响集群稳定性,这个也是需要去重点考虑。

***2. ***

整体设计

图片

从以上的需求分析可以看出,滴滴 kafka 云平台建设需要解决的问题比较多元,因此在设计之初就需要对整体有一个清晰的思路和规划,为此我们定义了一个核心设计原则,并对业务进行了合理的分层用以指导我们后续的产品设计和代码开发。

**********▍********1. 核心设计原则******

在平台的整体设计上,我们制定了“一点三化”的设计原则:

图片

**********▍********2. 业务分层架构******

在滴滴 kafka manager 具体的业务设计上,我们采取分层设计,从下至上分为以下几层:

图片

**********▍********3. 应用逻辑架构******

在实际的应用部署和关联上,整体的 kafka manager 和 kafka 引擎、kafka gateway 之间的逻辑关系比较简单,具体如下图所示:

图片

***3. ***

安全性

image.gif

以kafka 数据的安全性和集群使用过程中的稳定性保障是我们在构思和设计整个 kafka 云平台时首要考虑的问题,为此我们设计了一套 kafka 元数据网关和多租户的隔离模型来解决这些问题。******▍********1. 元数据网关设计**

用户在接入原始的 kafka 集群时没有安全管控,无法有效的管理用户的使用行为,对数据安全和集群稳定性造成严重的风险,因此我们设计了一套 kafka 集群元数据网关系统来解决安全问题。

kafka gateway 系统除了解决数据的安全风险还附带了以下作用:

需要注明说明一点,kafka gateway 的设计很巧妙的将这些功能实现在 kafka 引擎内部。因为 kafka 作为一个消息系统,其本身流量是非常的巨大,如果 kafka gateway 作为一个单独应用存在,所有流量都先通过 gateway 再进入 kafka 引擎,则对 kafka gateway 机器资源的消耗是非常巨大的,基本等同于需要增加一倍的机器资源,并且整个流程的耗时也会增加。所以在设计之初,就把 kafka gateway 和 kafka 引擎合在一起,这便是滴滴 kafka 引擎的特色能力所在。

搭建好 kafka gateway 系统之后,用户使用 kafka topic 的流程变为如下:

图片

******▍********2. 多租户隔离模型**

在滴滴内部,绝大部分的 topic 是在共享集群上的,在没有管控的情况下,topic 的各个分区是随机的分布在不同的 broker 上,随着集群中 topic 数量的增加,topic 流量的变大,某个具体 topic 的抖动有可能会影响到其他的 topic,因此共享集群下的 topic 隔离就是非常必要的,为此我们结合 kafka gateway 在 kafka manager 上设计了一套多租户隔离模型来解决这个问题,具体操作如下:

图片

***4. ***

平台化

image.gif

滴滴 kafka manager 平台建设之初就把易用性作为主要目标,因此在产品设计上非常注重用户的使用体验,前期通过反复的用户调研和内部讨论,最终提炼出普通用户和运维用户的高频操作,将这些操作都通过平台实现,降低用户的使用成本。

  1. 用户只关注自己的Topic的信息(默认),以减少不必要信息的干扰;

  2. 足够的指标信息,以保证用户能自助解决问题的同时减少不必要信息的干扰;

  1. 提炼用户、运维人员创建Topic、调整配额、扩展分区、集群迁移、集群重启等高频运维操作,将高频操作平台化,简化用户操作,大大降低运维成本。

  2. 提供整体集群直观的全局视角,以提高排查问题的效率以及对集群规模的直观感知,并提供详尽的局部视角,以提高排查问题的效率;

***5. ***

可视化

image.gif

运维人员在日常进行kafka 集群维护和稳定性保障过程中,对集群和 topic 的各项指标都非常关注,因此指标采集展示的准确性和及时性变得非常重要。为此我们将指标的可视化也作为 kafka manager 建设的核心目标。

针对 broker 和 topic 日常监控和诊断问题过程中最主要的指标进行筛选,这些指标被定义为黄金指标,如:topic 的 messageIn、byteIn等,并在平台的相关页面上进行高优高亮展示,便于用户在日常使用过程中,快速诊断和定位集群可能存在的问题。同时我们还根据 broker 和 topic 的指标监控,制定了一套用于快速识别其运行状态的健康分算法,将多个指标进行加权计算,最终得到一个健康分数值,健康分的高低则直观的展示了 broker 和 topic 实际运行过程中的状态,便于用户和运维快速从多个 broker 和 topic 中识别。

增加基于 topic 生产消费各环节的耗时统计,支持动态开启与关闭,帮助用户自助排查问题;关键指标业务运行过程化,不同分位数性能指标的监控,方便历史问题回溯诊断。

服务端记录客户端连接版本和类型,连接强感知,集群强管控,元信息的基石;controller 强管控,指定的主机列表,记录 controller 历史运行节点;记录 topic 的压缩格式,应用与业务元信息,业务强感知。

***6. ***

专家化

图片

基于之前全面的kafka数据采集,和运维同学在日常操作过程中的一些经验总结,我们将高频的问题和操作沉淀形成特有的专家服务,来智能诊断 kafka 集群和 topic 的健康状态,并提供对应的处理方案。

kafka manager 的专家服务能提供了以下功能:

  1. 背景:Kafka只具备Topic迁移的能力,但是不具备自动均衡的能力,Region内部分Broker压力非常大,但是部分Broker压力又很低,高低不均。如果不立即处理,轻则无法继续承接用户的需求,重则由于部分Broker压力过大导致集群出现稳定性问题。

  2. 解决方案:

  3. 在滴滴 kafka 引擎上增加 topic 在不同磁盘上分布的指标;

  4. kafka manager 通过定时采集的 topic 指标来分析 topic在不同磁盘上的分布均匀度;

  5. 针对不均匀的 topic 发起迁移操作,并在迁移时进行流量控制,保证迁移不会影响集群的稳定性。

  1. 背景:kafka 集群的 topic 相关的元信息存储在 zookpeer 上,最终由 controller 将其同步到各个broker。如果元信息过大,controller 同步的压力就会随之上升成为整个集群的瓶颈点,如果遇到某台 broker 出现问题,整个集群的数据同步就非常慢,从而影响稳定性。

  2. 解决方案:

  3. 在用户申请创建 topic 的时候,平台进行分区数的管控,分区数不能设置的特别大,然而随着 topic 流量的上升,topic 分区可能不足。如果遇到 topic 流量突增,超过了单分区能承载的能力,会导致分区所在的Broker出现压力,如cpu和load升高等问题,客户端也会出现发送堆积的情况。

  4. 基于现有的机型以及客户端的消费发送能力的压测,我们定义了单分区的承载流量,同时我们实时对每个 topic 的流量进行监控,当某个 topic 的峰值流量持续的达到和超过阈值之后,会对该 topic 进行标记或者告警,定义为分区不足的 topic。

  5. 针对监控发现出来的分区不足的 topic,由运维人员手动进行扩分区,或者 kafka manager 根据当前集群整个容量情况自动进行扩分区。

  1. 背景:公共集群中用户申请创建的 topic,它们的使用情况是各不相同的,还存在着部分 topic 根本不使用还占据集群元数据的情况,这对本来就十分拥挤的公共集群造成很大的资源浪费和稳定性风险,因此针对集群中的不使用的 topic进行治理就非常必要。

  2. 解决方案:

  3. 实时对集群中所有 topic 的流量进行采集监控,智能的分析 topic 的流量趋势,如果发现 topic 的流量持续在一段时间内为0,则进行标记或者告警。

  4. 针对监控发现的一定周期无流量、无生产消费链接的topic,进行通知和下线清理操作。

***7. ***

同类对比

image.gif

我们来和外部类似的产品进行一个简要的功能对比如下:

图片

经过简单的对比,我们可以看到,经过平台化、可视化、智能化、安全建设之后,滴滴kafka manager在安全性、用户体验、监控、运维管控上都有着显著的优势,也提供了很多特色的功能,极大的方便了用户和运维人员的日常使用,欢迎大家Star和体验https://www.didiyun.com/production/logi-KafkaManager.html

***8. ***

展望

图片

Logi-Kafka-Manager 已在滴滴内部上线使用,未来我们除了在平台化、可视化、智能化基础上持续改进,还会在以下几个方面持续努力:

我们将基于 MirrorMaker + KafkaGateWay 打造一套 kafka Topic 跨集群平滑迁移能力,在 kafka manager 平台上为 kafka topic 运维管控提供更为高效的迁移能力,进一步提升运维效率。

进一步的支持 kafka 2.5+ 最新版本的管控,并且新增更多的关键指标的监控,从而让 kafka manager 指标展示和问题定位的能力更强大。

作为在滴滴内部经过大量复杂场景验证过的 kafka 管控平台,我们会持续对其进行核心业务抽象,剥离滴滴内部依赖,回馈社区,我们也希望热心的社区同学和我们交流想法,共同提升滴滴 Logi-KafkaManager 的功能和体验

上一篇下一篇

猜你喜欢

热点阅读