##Kafka集群在马蜂窝大数据平台的优化与应用扩展

Kafka 是当下热门的消息队列中间件 , 它可以实时地处理海量数据 , 具备高吞吐、低延时等特性及可靠的消息异步传递机制 , 可以很好地解决不同系统间数据的交流和传递问题 。
Kafka 在马蜂窝也有非常广泛的应用 , 为很多核心的业务提供支撑 。本文将围绕 Kafka 在马蜂窝大数据平台的应用实践 , 介绍相关业务场景、在 Kafka 应用的不同阶段我们遇到了哪些问题以及如何解决、之后还有哪些计划等 。
一、应用场景
从 Kafka 在大数据平台的应用场景来看 , 主要分为以下三类:
第一类是将 Kafka 作为数据库 , 提供大数据平台对实时数据的存储服务 。从来源和用途两个维度来说 , 可以将实时数据分为业务端 DB 数据、监控类型日志、基于埋点的客户端日志(H5、WEB、APP、小程序)和服务端日志 。
第二类是为数据分析提供数据源 , 各埋点日志会作为数据源 , 支持并对接公司离线数据、实时数据仓库及分析系统 , 包括多维查询、实时 Druid OLAP、日志明细等 。
第三类是为业务方提供数据订阅 。除了在大数据平台内部的应用之外 , 我们还使用 Kafka 为推荐搜索、大交通、酒店、内容中心等核心业务提供数据订阅服务 , 如用户实时特征计算、用户实时画像训练及实时推荐、反作弊、业务监控报警等 。
主要应用如下图所示:
##Kafka集群在马蜂窝大数据平台的优化与应用扩展
文章图片

文章图片

二、演进之路
1、四个阶段
早期大数据平台之所以引入 Kafka 作为业务日志的收集处理系统 , 主要是考虑到它高吞吐低延迟、多重订阅、数据回溯等特点 , 可以更好地满足大数据场景的需求 。
但随着业务量的迅速增加 , 以及在业务使用和系统维护中遇到的问题 , 例如注册机制、监控机制等的不完善 , 导致出现问题无法快速定位 , 以及一些线上实时任务发生故障后没有快速恢复导致消息积压等, 使 Kafka 集群的稳定性和可用性得受到挑战 , 经历了几次严重的故障 。
解决以上问题对我们来说迫切而棘手 。针对大数据平台在使用 Kafka 上存在的一些痛点 , 我们从集群使用到应用层扩展做了一系列的实践 , 整体来说包括四个阶段:
第一阶段:版本升级
围绕平台数据生产和消费方面存在的一些瓶颈和问题 , 我们针对目前的 Kafka 版本进行技术选型 , 最终确定使用 1.1.1 版本 。
第二阶段:资源隔离
为了支持业务的快速发展 , 我们完善了多集群建设以及集群内 Topic 间的资源隔离 。
第三阶段:权限控制和监控告警
首先在安全方面 , 早期的 Kafka 集群处于裸跑状态 。由于多产品线共用 Kafka , 很容易由于误读其他业务的 Topic 导致数据安全问题 。因此我们基于 SASL/ SCRAM + ACL 增加了鉴权的功能 。
在监控告警方面 , Kafka 目前已然成为实时计算中输入数据源的标配 , 那么其中 Lag 积压情况、吞吐情况就成为实时任务是否健康的重要指标 。因此 , 大数据平台构建了统一的 Kafka 监控告警平台并命名「雷达」 , 多维度监控 Kafka 集群及使用方情况 。
第四阶段:应用扩展
早期 Kafka 在对公司各业务线开放的过程中 , 由于缺乏统一的使用规范 , 导致了一些业务方的不正确使用 。为解决该痛点 , 我们构建了实时订阅平台 , 通过应用服务的形式赋能给业务方 , 实现数据生产和消费申请、平台的用户授权、使用方监控告警等众多环节流程化自动化 , 打造从需求方使用到资源全方位管控的整体闭环 。
下面围绕几个关键点为大家展开介绍 。
2、核心实践
1)版本升级
之前大数据平台一直使用的是 0.8.3 这一 Kafka 早期版本 , 而截止到当前 , Kafka 官方最新的 Release 版本已经到了 2.3 , 于是长期使用 0.8 版本过程中渐渐遇到的很多瓶颈和问题 , 我们是能够通过版本升级来解决的 。


推荐阅读