把LinkedIn 的 “中枢神经系统” Kafka 搬上数人云

什么是Kafka?

Kafka 是一个使用 Scala 编写的分布式基于发布/订阅的消息系统。它最初由 LinkedIn 公司开发,之后成为 Apache 项目的一部分。 Kafka 是一个分布式的,可划分的,冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据。

它的架构包括以下组件:

  • 话题(Topic):是特定类型的消息流。消息是字节的有效负载(Payload),话题是消息的分类名或种子(Feed)名。
  • 生产者(Producer):是能够发布消息到话题的任何对象。
  • 缓存代理(Broker),Kafa集群中的一台或多台服务器统称为broker。
  • 消费者(Consumer)可以订阅一个或多个话题,并从Broker拉数据,从而消费这些已发布的消息。

Kafka架构图

Kafka是LinkedIn的"中枢神经系统"

Kreps 将 Kafka 描述为 LinkedIn 的 “中枢神经系统”,管理从各个应用程序汇聚到此的信息流,这些数据经过处理后再被分发到各处。

LinkedIn在2011年7月开始大规模使用Kafka,当时Kafka每天大约处理10亿条消息,这一数据在2012年达到了每天200亿条,而到了2013年7月,每天处理的消息达到了2000亿条。在几个月前,他们的最新记录是每天利用Kafka处理的消息超过1万亿条,在峰值时每秒钟会发布超过450万条消息,每周处理的信息是1.34 PB。每条消息平均会被4个应用处理。在过去的四年中,实现了1200倍的增长。

Kafka 的常见应用场景

传统的消息

对于一些常规的消息系统,Kafka是个不错的选择;partitons/replication和容错,可以使Kafka具有良好的扩展性和性能优势. LinkedIn就使用Kafka作为传统的消息系统实现标准的队列和消息的发布—订阅,例如搜索和内容提要(Content Feed)。

网站跟踪分析

Kafka可以作为"网站活动跟踪"的最佳工具;可以将网页/用户操作等信息发送到Kafka中.并实时监控,或者进行离线统计分析等。例如,为了更好地理解用户行为,改善用户体验,LinkedIn会将用户查看了哪个页面、点击了哪些内容等信息发送到每个数据中心的Kafka集群上,并通过Hadoop进行分析、生成日常报告。

日志收集

Kafka的特性决定它非常适合作为"日志收集中心";application可以将操作日志"批量""异步"的发送到kafka集群中,而不是保存在本地或者DB中;Kafka可以批量提交消息/压缩消息等,这对producer端而言,几乎感觉不到性能的开支.此时consumer端可以使hadoop等其他系统化的存储和分析系统.

有哪些公司使用了神器Kafka?

一些耳熟能详的公司:LinkedIn, Yahoo!, BOX, Twitter, Paypal, Uber, Airbnb,…… 当然还有数人云:)

使用Kafka的公司

下面小编就给大家介绍如何在数人云上部署一套Kafka集群,并通过Kafka_manager web端管理工具来管理Kafka集群。让大家和上面这些公司一样玩转神器Kafka。

如何在数人云部署Kafka集群?

1. 建立集群(应用发布环境)

注册数人云,在数人云上建立一个集群。参考:数人云用户手册-建立集群

2. 发布Kafka应用
2.1 发布 Zookeeper

因为 Kafka 集群需要使用 Zookeeper来保证系统的高可用 ,所以需要先在数人云上发布Zookeeper集群。参考:快速搭建ZooKeeper集群指南

2.2 新建 Kafka 应用

1. 选择"应用管理"中的"新建应用",如图所示:

在数人云上新建Kafka应用

2. 新建应用

  • 填写应用名称: kafka
  • 选择集群: your-cluster
  • 添加应用镜像地址: testregistry.dataman.io/centos7/jdk7-scala2.11-kafka0.8.22
  • 填写镜像版本: 20151201
  • 应用模式: HOST模式
  • 选择主机:your-app-ip(多选)
  • 选择容器规格: CPU:0.1 内存:1024 MB
  • 容器个数: your-kafka-number

点选:1容器/主机 <- 每个宿主机只能运行1个 app

在数人云上新建Kafka应用2

添加应用地址:

Kafka应用配置表

添加应用地址

添加环境变量:

添加环境变量1

添加环境变量2

3. 检查应用状态

简单的检查应用占用集群资源的情况,点击应用管理 -> 选择监控的 tab 页

检查应用状态

至此,Kafka集群已经建立完毕, 可没有一个web界面来管理?别急,下面我们就开始介绍如何搭建一个基于Web的管理工具Kafka_Manager

Kafka_Manager 简介

Apache Kafka 在 Yahoo 内部已经被很多团队所使用,例如媒体分析团队就将其应用到了实时分析流水线中,同时,Yahoo 整个 Kafka 集群处理的峰值带宽超过了 20Gbps(压缩数据)。为了让开发者和服务工程师能够更加简单地维护 Kafka 集群,Yahoo 构建了一个基于 Web 的管理工具,称为 Kafka Manager,日前该项目已经在GitHub上开源。

3. 发布 Kafka_Manager 应用

因为 KafkaManager 是监控 Kafka 的工具,所以在启动 KafkaManager 前,请先按照上面的说明启动 Kafka。

1. 选择"应用管理"中的"新建应用",如图所示:

kafka manager应用发布

2. 新建应用

  • 填写应用名称: kafka-manager
  • 选择集群: your-cluster
  • 添加应用镜像地址: testregistry.dataman.io/centos7/jdk8-kafka-0.8.x-manager
  • 填写镜像版本: 20151204
  • 应用模式: 网桥模式
  • 选择主机:your-app-ip(多选)
  • 选择容器规格: CPU:0.1 内存:512 MB
  • 容器个数: 1

点选:1容器/主机 <- 每个宿主机只能运行1个 app

添加kafka manager应用

添加应用地址:

添加kafka manager应用1

添加kafka manager应用2

添加环境变量:

添加kafka manager应用环境变量

添加kafka manager应用环境变量

3. 检查应用状态

简单的检查应用占用集群资源的情况,点击应用管理 -> 选择监控的 tab 页

检查kafka manager应用状态

4. 打开 Kafka_Manager 页面

游览器输入你的监控地址域名后,按照你的集群情况添加信息

Kafka_Manager监控页面

5. 点击 save 后,就可以打开监控页面

可以看到刚才我们加入的 kafka 集群,数量是3个

kafka 集群

现在包含web端管理工具的Kafka集群就搭建完成了,大家可以尽情的玩耍和测试了~ 有任何问题,可以到 open.shurenyun.com 技术社区交流。