在LinkedIn的 Kafka 生态系统
在LinkedIn的 Kafka 生态系统
Apache Kafka是一个高度可扩展的消息传递系统,作为LinkedIn的中央数据管道起着至关重要的作用。 Kafka 是在2010年在LinkedIn开发的,它目前在1400多家经纪商处理超过1.4万亿条消息。Kafka 强大的耐用性和低延迟使我们能够使用Kafka为LinkedIn提供一些新的关键任务用例。其中包括用基于Kafka的复制,威尼斯替代Espresso中的 MySQL复制,并支持下一代Databus(正在开发中)。
随着我们的 Kafka 使用量继续快速增长,我们必须解决一些重大问题,以使所有这些成为可能,所以我们围绕 Kafka 开发了一个完整的生态系统。在这篇文章中,我将总结一些我们的解决方案,这些解决方案对于使用 Kafka 的人来说可能是有用的,并且强调几个即将到来的活动,您可以从中了解更多。
Kafka 生态系统在LinkedIn
上图并未完全捕捉到LinkedIn上的各种数据管道和拓扑结构,但是可以说明LinkedIn Kafka部署中的关键实体以及它们如何相互影响。
核心 Kafka 服务
Kafka 经纪人
我们为每个数据中心的不同目的运行几组 Kafka 经纪人。我们目前在LinkedIn上部署了近1400名经纪人,每周收到超过2 PB的数据。我们通常运行Apache Kafka主干,每个季度都会削减一个新的内部版本。
Kafka 镜子制造商
镜像制造商使我们能够通过从源集群中消费并生成目标集群来制作集群副本。在数据中心和数据中心内都有多个镜像管道。Todd Palino的文章总结了我们如何使用这个来促进LinkedIn上的Kafka的多色。
模式注册表
我们已经在LinkedIn的数据管道内将Avro标准化为通用语言。因此,每个生产者都编码Avro数据,在模式注册中注册Avro模式,并在每个序列化消息中嵌入一个模式ID。消费者从模式注册表服务中获取与ID相对应的模式,以反序列化Avro消息。虽然我们的数据中心有多个模式注册表实例,但这些实例由包含模式的单个(复制)数据库支持。
Kafka REST代理
Kafka REST是我们为非Java客户端提供的HTTP代理。我们的大多数Kafka集群都有一个关联的REST代理。Kafka REST也是主题行政运作的官方网关。
Nuage
Kafka大部分都是自助服务:用户定义自己的事件模式并开始制作主题。Kafka代理自动创建具有默认配置和分区计数的主题。最后,任何消费者都可以消费这个话题,使 Kafka 完全开放。
随着 Kafka 的使用量不断增加,出现新的使用案例,上述方法中出现了一些限制。首先,一些主题需要自定义配置,需要对Kafka SRE进行特殊请求。其次,大多数用户很难发现和检查他们拥有的主题的元数据(例如,字节率,审计完整性,模式历史等)。第三,由于Kafka包含了各种安全功能,某些主题所有者可能希望限制对主题的访问,并自行管理ACL。
Nuage是LinkedIn在线数据基础设施资源的自助服务门户,最近我们与Nuage团队合作,在Nuage内增加了对Kafka的支持。这为用户提供了一个方便的地方来管理他们的主题和相关的元数据。Nuage将主题CRUD操作委托给Kafka REST,它抽象出Kafka行政事业的细微差别。
图书馆
LiKafka客户端库
LiKafka制作人包装开放源码制作人,但也进行模式注册,Avro编码,审计和支持大消息。审计事件计算在10分钟窗口中发送给每个主题的事件数量。同样,消费者包装开源消费者,并进行模式查找,Avro解码和审计。
Kafka 推工作
Kafka推送工作用于将丰富的数据从Hadoop发送到Kafka,供在线服务使用。推送作业在CORP环境中的Hadoop集群上运行,并将数据生成到CORP数据部署Kafka集群中。镜像制造者将这些数据复制到PROD数据部署集群中。
Gobblin
Gobblin是LinkedIn的新的摄取框架,并贬低了 Camus,这是我们以前的Kafka to Hadoop桥梁。它基本上是一个大的Hadoop作业,它将Kafka中的所有数据复制到Hadoop中进行离线处理。
监测服务
Kafka 监视器
这是Kafka部署的一套持续运行的验证测试,我们利用这些测试来验证新版本以及监控现有部署。我们目前正在监控基本但重要的指标,如端到端延迟和数据丢失。我们预计未来我们将在测试集群中使用这个框架来不断地测试管理操作的正确性(例如分区重新分配),甚至利用诸如Simoorg之类的错误注入框架来确保我们能够满足我们的可用性SLA即使在各种失败的情况下。
Kafka 审计
我们的审计跟踪基础架构中有两个关键组件:
一种 Kafka 审计服务,用于消费和重新计算 Kafka 集群中的所有数据,并发出类似于追踪生产者的审计事件。这使我们能够将Kafka集群上的计数与生产者计数进行协调,并检测数据丢失(如果有的话)。
Kafka 审计验证服务,持续监控数据的完整性,并提供用于查看审计跟踪的用户界面。此服务消耗并将审计事件插入审计数据库,并在数据延迟或丢失时发出警报。我们使用审计数据库来调查发生的警报,并精确地指出数据丢失的位置。
Kafka 生态系统
地洞
Burrow是监控Kafka消费者健康的棘手问题的一个优雅的答案,并提供了一个消费者状态的全面视图。它提供消费滞后检查作为服务,而不需要指定阈值。它以主题分区粒度监视所有消费者的承诺偏移,并根据需要计算这些消费者的状态。
流处理在LinkedIn
Samza是LinkedIn的流处理平台,可以帮助用户尽快完成流处理工作并投入生产。流处理领域一直嗡嗡作响,有许多开源系统正在做类似的事情。与专注于非常广泛的功能集的其他流处理系统不同,我们专注于使Samza在LinkedIn规模下可靠,高性能和可操作。现在我们有很多生产工作量正在运行,我们可以把注意力放在拓宽功能集上。这篇较早的博客文章详细介绍了我们关于相关性,分析,站点监控,安全等方面的生产用例以及我们正在开发的一些新功能。
即将举行的活动
如果您有兴趣进一步了解我们的Kafka生态系统,我们如何部署和排除Kafka故障,以及我们的新特性 /用例,我们邀请您参加这些即将到来的会议:
4月26日:Espresso数据库复制与Kafka @ Kafka峰会:Espresso是LinkedIn的分布式文档商店,托管我们最重要的成员数据。Tom Quiggle将介绍为什么Espresso将从MySQL的内置复制机制切换到Kafka,以及Espresso如何将Kafka作为复制流 - 这是一个将Kafka的耐久性和可用性保证加入测试的用例!
4月26日:更多的数据中心,更多的问题 @ Kafka峰会:Todd Palino将谈论多数据中心和多层 Kafka 集群的基础架构,并就如何监控整个生态系统提供实用技巧。
4月26日: 在LinkedIn Kafka 天,2015年 @ Kafka 峰会:霍埃尔·科什将深入了解一些最困难,最突出的 Kafka 生产问题是LinkedIn创下2015年该谈话会在每个停运及其影响,以及方法到检测,调查和整治。
5月10日:建立一个自助服务 Kafka 系统 @ 阿帕奇:大数据:霍埃尔·科什将提供一个深入了解成什么需要通过共同编织的安全性,配额的RESTful API和Nuage使 Kafka 一个真正的多租户服务。
5月9日: 背后缩放流处理应用程序的秘密 @ 阿帕奇:大数据:Navina拉梅什将描述阿帕奇Samza对国家管理和容错方法,并讨论了如何可以有效地用于扩展状态流处理应用程序。
6月28-30日: λ-少在LinkedIn @流处理@规模的Hadoop峰会:Yi·潘和卡蒂克·帕拉梅西瓦姆将突出Samza的主要优势是实时流处理平台,其在LinkedIn使用的动手概述。