转载

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

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

用例

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

正文到此结束
Loading...