Kafka 在 LinkedIn 公司的应用场景、现状与未来

  • 孙镜涛

2015 年 2 月 10 日

话题:语言 & 开发架构

Apache Kafka 是分布式发布 - 订阅消息系统,它最初由 LinkedIn 公司开发,之后成为 Apache 项目的一部分。Kafka 是一个分布式,分区化,可复制的提交日志服务。LinkedIn 使用 Kafka 实现了公司不同应用程序之间的松耦和,那么作为一个可扩展、高可靠的消息系统,它在 LinkedIn 公司内部都有哪些应用场景、其生态系统是什么样的、未来又会向哪些方面发展呢?最近,LinkedIn 的工程总监 Mammad Zadeh 在其公司博客上发表了一篇题为《Kafka 在 LinkedIn 公司的发展现状和未来 》的文章,对此进行了介绍。

用例

  1. 监控:主机通过 Kafka 发送与系统和应用程序健康相关的指标,然后这些信息会被收集和处理从而创建监控仪表盘并发送警告。除此之外,LinkedIn 还利用 Apache Samza 实现了一个能够实时处理事件的富调用图分析系统。
  2. 传统的消息: 应用程度使用 Kafka 作为传统的消息系统实现标准的队列和消息的发布—订阅,例如搜索和内容提要(Content Feed)。
  3. 分析: 为了更好地理解用户行为,改善用户体验,LinkedIn 会将用户查看了哪个页面、点击了哪些内容等信息发送到每个数据中心的 Kafka 集群上,并通过 Hadoop 进行分析、生成日常报告。
  4. 作为分布式应用程序或平台的构件(日志):大数据仓库解决方案 Pinot 等产品将 Kafka 作为核心构件(分布式日志),分布式数据库 Espresso 将其作为内部副本并改变传播层。

Kafka 生态系统

为了支持各种使用场景,Kafka 还需要其他组件的配合,包括:

  1. MirrorMaker:一个用来在不同的 Kafka 集群之间移动数据的开源项目。在很多情况下我们需要对多个数据中心产生的事件执行业务逻辑,MirrorMaker 的作用就是收集这些数据中心产生的事件。
  2. REST 接口:让非 Java 应用程序能够很容易地发布和消费 Kafka 消息。
  3. 模式注册表:LinkedIn 使用 AVRO 处理事件模式的标准化,在核心的 Kafka API 之上有一层独立的 API 负责发送和接收 AVRO 事件,该 API 使用了模式注册表服务处理 Kafka 事件的序列化和反序列化。
  4. 审计服务:一个数据中心产生的事件通常会被移动到其他数据中心进行离线处理,此时消费应用程序(例如 MapReduce 任务)需要清楚一个特定时间窗口所产生的事件何时才能接收完成以便进行离线处理,为此需要基于 Kafka 构建一个审计服务。
  5. 一个能够将数据从 Hadoop 推送到 Kafka 的工具:大部分经过 MapReduce 集群处理后的数据都需要存储到服务数据库中(例如 Voldemort),桥接工具能够帮助我们将数据从 Hadoop 推送到 Kafka 上进而进行存储。

Kafka 的未来

  1. 安全:为 Kafka 代理添加基础的认证授权功能。即使是在一个安全的网络中,该功能对于某些类型的数据而言也是必须的,因为这样能够避免人为的错误。这一部分工作开源社区已经在做了。
  2. 限额:考虑到很多不同的应用程序会使用同一个 Kafka 集群,保证某个应用程序不会突然耗尽所有的系统资源以致于影响集群上其他应用程序的运行是非常重要的。 目前,当应用程序开始从 Kafka 日志的开头读取数据或者在长时间的暂停之后再次启动时,网络会饱和,此时会对共享该网络的其他应用程序造成意想不到的后果,2015 年 LinkedIn 将重点处理这一问题。
  3. 可靠性和可用性:Kafka 有很多开源贡献者,但是即使有大量的开发工程师,所有的代码也都会经过严格的测试才会发布到最终的产品中,同时 LinkedIn 还将积极解决自己日常使用时发现的问题。
  4. 核心功能:在过去的一年中,LinkedIn 创建了一组新的 API 让 Kafka 能够执行流水线发布操作从而提升将事件发布到 Kafka 上的性能。新的一年,LinkedIn 还将开发一个新的消费 API,该 API 将移除对 Zookeeper 的依赖,让我们能够拥有一个完全安全的模型。此外,LinkedIn 还会将 Kafka REST 接口作为一等公民,使其支持核心的 SLAs 和监控。
  5. 有效地节约成本:Kafka 能够随着公司业务规模的扩大而扩展,同时不会在扩展的过程中出现各种各样的问题让人应接不暇。
  6. 新举措: 目前,LinkedIn 主要使用 Kafka 解决高吞吐量的问题,将来 Kafka 将会被应用到新的场景中。例如,分布式数据库 Espresso 将会利用 Kafka 实现主、副 Espresso 存储节点之间的复制。
  7. 提升可操作性:现在 Kafka 有很多人工流程,为此 LinkedIn 公司的可靠性工程师创建了很多实用工具,将来这些工具或功能将会集成到 Kafka 中以减少人为的错误。

感谢郭蕾对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

语言 & 开发架构