当前, 友盟消息推送平台 的日志服务日均接收二十几亿的请求,预计年底日均请求会突破六十亿。这其中,不得不提到一款大数据处理的利器:Kafka。Kafka 是什么?是小说《变形记》的作者?其实,今天要提的Kafka 是最近非常流行的一款开源软件,如果你留心最近两年的技术发展趋势,那么你会发现,Kafka 的身影经常会出现在各大技术分享大会上。

准确的说,Kafka 是 LinkedIn 在2010年开源的一款分布式高吞吐的持久化日志服务,用开发团队自己的话说: “We designed Kafka to be able to act as a unified platform for handling all the real-time data feeds a large company might have.” 最开始,Kafka 只是用于 LinkedIn 内部海量日志的收集和传输,但是因为其完善的生产消费模型和强大的性能,一经开源,就立刻得到了广泛的应用,目前已经被主流互联网公司作为数据管道或者消息系统在使用。

在Kafka中,数据通过 Producer(生产者) push 到 Broker(Kafka集群) 中,然后通过 Consumer(消费者) pull 到各个数据管线或者其他业务层。这个过程中,数据是被持久化在 Kafka 的硬盘上的,各个数据处理流程可以独立的消费数据。Kafka 的拓补结构如图所示(转自 InfoQ):


值得一提的是,Kafka的消费模型既实现了队列模型,也实现了发布订阅(Pub-sub)模型。通过分组,多个 消费者可以互斥的消费数据,这时的Kafka 就类似一个高性能消息队列。另外,多个消费者也可以订阅同一份数据,这样就可以方便的从现有的数据管线中分出一条新的分支。
Kafka 从最设计之初就是依据一线互联网公司后台服务所能产生的数据量设计的,所以性能非常优异:
  • Kafka 的数据吞吐量极高。单机就支持100k数量级的QPS。
  • Kafka 是把数据持久化到硬盘的,且时间复杂度为o(1)。TB 级别的数据也可在常数时间的访问性能。
  • Kakfa 是分布式系统,支持无停机水平扩展系统。
大厂出品的 Kafka,可以作为高性能消息中间件使用,但Kafka目前更多的用在各种异构数据处理平台中。在友盟消息推送平台中,Kafka 是作为数据总线在使用的。 Kafka 直接负责持久化来自移动端 SDK 的海量日志,并且与后段数据处理流程解耦。实时计算、离线计算及其他特定业务的数据 服务都以 Kafka 为数据源头。其中,实时计算采用 Spark,计算一些开发者比较关心的如送达率、打开率等数据指标。离线计算使用 MR 任务,会计算一些用户标签和设备属性。


关于生产环境中Kafka 的监控,可以使用 Yahoo 基于 Play Framework 的Kafka Manager。当然,如果只关注几个核心指标如数据在 Kafka 中的堆积等,也可以使用 Kafka 自带的系统工具。下面是一个查看 kafka 队列堆积的例子:

如图所示,使用 Kafka 自带的 ConsumerOffsetChecker,指定group id,topic 和 zookeeper 连接,返回结果中 Lag 列即表示Kafka 中每个 partition 的堆积的消息数。

特别需要注意的是,数据在 Kafka 中的单位是message,分布式服务消费message 的过程中,Kafka 并不保证message间的时序。如果要保证时序,需要自行实现一致性 Hash 算法,将需要保证时序的 message根据某一指定的 key 分到同一个 partition 上。欢迎开发者们关注我们的微博 “友盟推送” 来获取更多关于产品动态、技术分享方面的话题。
Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐