文档章节

Kafka是个奇葩!——Linkin论文学习笔记

难易
 难易
发布于 2014/08/26 15:04
字数 1845
阅读 3250
收藏 99

Kafka是啥?##

是个消息中间件吗?那和市面上其他一堆堆的中间件例如ActiveMQ, RabbitMQ有什么区别?

答案只有一个:

Kafka是个集群的消息中间件+存储,一个节点可以存储几T的数据!

为啥一个中间件需要存储数据呢?

慢慢道来……

原来,对于Linkin这样的互联网企业来说,用户和网站上产生的数据有三种

  1. 需要实时响应的交易数据,用户提交一个表单,输入一段内容,这种数据最后是存放在关系数据库(Oracle, MySQL)中的,有些需要事务支持。
  2. 活动流数据,准实时的,例如页面访问量、用户行为、搜索情况,这些数据可以产生啥?广播、排序、个性化推荐、运营监控等。这种数据一般是前端服务器先写文件,然后通过批量的方式把文件倒到Hadoop这种大数据分析器里面慢慢整。
  3. 各个层面程序产生的日志,例如httpd的日志、tomcat的日志、其他各种程序产生的日志。码农专用,这种数据一个是用来监控报警,还有就是用来做分析。

Linkin的牛逼之处,就在于他们发现了原先2,3的数据处理方式有问题,对于2而言,原来动辄一两个钟头批处理一次的方式已经不行了,用户在一次购买完之后最好马上就能看到相关的推荐。而对于3而言,传统的syslog模式等也不好用,而且很多情况下2和3用的是同一批数据,只是数据消费者不一样。

这2种数据的特点是:

  1. 准实时,不需要秒级响应,分钟级别即可。
  2. 数据量巨大,是交易数据的10倍以上。
  3. 数据消费者众多,例如评级、投票、排序、个性化推荐、安全、运营监控、程序监控、后期报表等

于是,Linkin就自己开发了一套系统,专门用来处理这种性质的数据,这就是Kafka

那么,在整个实践过程中Linkin做了什么样的设计,解决了什么问题?

首先看下数据流动图:

数据结构图

多数据中心怎么管理数据:

跨数据中心图

集群本身的架构图

Kafka内部架构图

Kafka内部架构图,分为数据产生者(Producer),数据中间者(Broker),数据消费者(Consumer)

显然,这是一个集群的发布/订阅系统,有如下几个特点

  1. 生产者是推数据(Push),消费者是拉数据(Pull)。存在数据复用,在Linkin平均生产1条消息会被消费5.5次。
  2. 数据生产者和数据消费者的速度不对等,所以要把数据沉淀在Kafka内慢慢处理,Linkin一般在集群内放7天的数据。
  3. 性能上追求高吞吐,保证一定的延时性之内。这方面做了大量优化,包括没有全局hash,批量发送,跨数据中心压缩等等。
  4. 容错性上使用的“至少传输一次”的语义。不保证强一次,但避免最多传一次的情况。
  5. 集群中数据分区,保证单个数据消费者可以读到某话题(topic)的某子话题(例如某用户的数据)的所有数据,避免全局读数据
  6. 数据规范性,所有数据分为数百个话题,然后在数据的源头——生产者(Producer)这边就用Schema来规范数据,这种理念使得后期的数据传输、序列化、压缩、消费都有了统一的规范,同时也解决了这个领域非常麻烦的数据版本不兼容问题——生产者一改代码,消费者就抓瞎。
  7. 用于监控,这个系统的威力在于,前面所有生产系统的数据流向,通过这个系统都能关联起来,用于日常的运营也好,用于数据审计,用于运维级别的监控也好都是神器啊!

To be continued...##

所以,Kafka的设计基本上目前这个领域的唯一选择。我也看了很多其他实现,包括:

scribe(Facebook)          | 2   | C++      | 已停止更新,不建议使用
flume(Apache, Cloudera)   |1    | Java     | 配置较重
chukwa(Hadoop)            |12   | Java     | 2012发布最后一版,不建议使用
fluentd                   |1    | Ruby     | 比较活跃,看起来不错
logstash                  |12345| JRuby    | 功能全,据说有不少小bug
splunk                    |12345| C/Python | 商业闭源,功能强大,可做参考
timetunnel(Alibaba)       | 2   | Java     | 基于thrift,10年左右成熟
kafka(Linkin)             | 2 4 | Scala    | 性能强劲,设计巧妙,可以作为基础设施
Samza(Linkin)             |12345|          | =Kafka+YARN+Hadoop
rabbitmq/activemq/qpid    | 2   | Java     | 传统消息中间件
Storm(twitter)            |  3  | Clojure  | 实时计算系统
Jstorm(Alibaba)           |  3  | Java     | storm的Java版,据说更稳定
S4(Yahoo)                 |  3  | Java     | 2013年已停止维护
Streambase(IBM)           |  3  | Java     | 商业产品,作为参考
HStreaming                |  3  | Java     | 商业产品,作为参考
spark                     |  3  | Scala    | 基于Hadoop
mongodb                   |   4 | C++      | 比较浪费硬盘
mysql                     |   4 | C++      | 无需多说
hdfs/hbase                |   4 | Java     | 无需多说
  1. 数据采集组件
  2. 数据传输组件
  3. 数据实时计算/索引/搜索组件
  4. 数据存储/持久化组件
  5. 数据展示/查询/报警界面组件

从数据传输这块的设计理念来说,Kafka是最为先进的,

在目前的各种实现中,我猜测可以和Kafka一战的也就只有Splunk了

后面我会分析一下这个软件的设计和实现

欲知后事如何,且听下回分解 ~~

主要参考文章

日志:每个软件工程师都应该知道的有关实时数据的统一概念 —— 这篇比较抽象,高屋建瓴,理论先行

Building LinkedIn’s Real-time Activity Data Pipeline —— 实践层的论文,把做事情的前因后果都写明白了

分布式发布订阅消息系统 Kafka 架构设计 —— 落地设计

次要参考文章

《分布式发布订阅消息系统 Kafka 架构设计》

《StreamBase简介》

《Yahoo! s4和Twitter storm的粗略比较》

《最火爆的开源流式系统Storm vs 新星Samza》

《架构之淘宝实时数据传输平台: TimeTunnel介绍》

《Graylog2 简介》

《logstash 还是不行》

《日志收集以及分析:Splunk 》

《LogStash日志分析系统》

《LogStash,使日志管理更简单》

《logstash VS splunk》

《个性化离线实时分析系统pora》

《日志:每个软件工程师都应该知道的有关实时数据的统一概念》

《基于Flume的美团日志收集系统(二)改进和优化》

《基于Flume的美团日志收集系统(一)架构和设计》

《对互联网海量数据实时计算的理解》

《流式日志系统启示录》

《flume-ng+Kafka+Storm+HDFS 实时系统搭建》

© 著作权归作者所有

难易

难易

粉丝 272
博文 45
码字总数 103644
作品 2
杭州
程序员
私信 提问
加载中

评论(9)

好了_是我
好了_是我
这个领域,logstash是无敌的
Will_awokE
Will_awokE

引用来自“难易”的评论

metaq我仔细看了,作者说了参考了kafka的设计,用java实现的,看起来几个特性都很不错。
metaq就是java版的kafka
难易
难易 博主
metaq我仔细看了,作者说了参考了kafka的设计,用java实现的,看起来几个特性都很不错。
难易
难易 博主

引用来自“kimmking”的评论

个人觉得timetunnel、metaq才是对手。

引用来自“难易”的评论

TT和metaq我网上能搜到的资料非常的少,所以不是很了解,在性能、吞吐量和高可用性方面如何?

引用来自“Will_awokE”的评论

2L 就是阿里中间件的大牛。
kimking -- 包商银行 - 技术主管?
Will_awokE
Will_awokE

引用来自“kimmking”的评论

个人觉得timetunnel、metaq才是对手。

引用来自“难易”的评论

TT和metaq我网上能搜到的资料非常的少,所以不是很了解,在性能、吞吐量和高可用性方面如何?
2L 就是阿里中间件的大牛。
难易
难易 博主

引用来自“kimmking”的评论

个人觉得timetunnel、metaq才是对手。
TT和metaq我网上能搜到的资料非常的少,所以不是很了解,在性能、吞吐量和高可用性方面如何?
难易
难易 博主

引用来自“寻梦2012”的评论

作者写的可以。希望能推出例子
先做个调研,后面可能会动手:-)
kimmking
kimmking
个人觉得timetunnel、metaq才是对手。
寻梦2012
寻梦2012
作者写的可以。希望能推出例子
迟来的2017总结文

悄然过去的2017年,仿佛还来不及说再见。突然想起那天科比球衣退役时热泪盈眶地在宿舍看直播的自己。 默默做个总结来迎接新的一年。 2017年走过的城市还蛮多的。一年下来,半年北方,半年小厦...

胖胖雕
2018/01/10
21
0
干货 | 没能去参加NIPS 2017?这里有一份最详细的现场笔记(附PDF)

  AI 科技评论按:2017年12月3-9日,第31届神经信息处理系统大会在美国加州长滩市举行。NIPS(Conference and Workshop on Neural Information Processing Systems)始于1987年,最初是定位...

AI科技评论
2017/12/20
0
0
机器学习资料汇总(不断更新)

刘禹锡在《陋室铭》里面曾经写道:山不在高,有仙则名。大致的意思是山的名声不在于山的高低,只要有仙人居住就会出名。这句话揭露了价值的本质。近期准备把找到的一些课程、资料全部收集起来...

斐波那契的数字
2017/12/30
0
0
常用mq对比及rocketmq、kafka选型

一、常用MQ对比 上述来自CSDN搜索博客中的图片。 上述来自阿里云栖社区搜索博客中的图片。 二、rocket、kafka选型 (以下汉字内容是从下述各个网站中摘取出的个人认为的重点内容。) 1、Kaf...

二进制卤蛋
2017/10/11
0
0
Java后端工程师学习大纲

之前自己总结过的Java后端工程师技能树,其涵盖的技术点比较全面,并非一朝一夕能够全部覆盖到的。对于一些还没有入门或者刚刚入门的Java后端工程师,如果一下子需要学习如此多的知识,想必很...

JackFace
2016/07/08
656
0

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins World 贡献者峰会及专家答疑展位

本文首发于:Jenkins 中文社区 原文链接 作者:Marky Jackson 译者:shunw Jenkins World 贡献者峰会及专家答疑展位 本文为 Jenkins World 贡献者峰会活动期间的记录 Jenkins 15周岁啦!Jen...

Jenkins中文社区
19分钟前
6
0
杂谈:面向微服务的体系结构评审中需要问的三个问题

面向微服务的体系结构如今风靡全球。这是因为更快的部署节奏和更低的成本是面向微服务的体系结构的基本承诺。 然而,对于大多数试水的公司来说,开发活动更多的是将现有的单块应用程序转换为...

liululee
34分钟前
6
0
OSChina 周二乱弹 —— 我等饭呢,你是不是来错食堂了?

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @ 自行车丢了:给主编推荐首歌 《クリスマスの夜》- 岡村孝子 手机党少年们想听歌,请使劲儿戳(这里) @烽火燎原 :国庆快来,我需要长假! ...

小小编辑
今天
329
8
玩转 Springboot 2 之热部署(DevTools)

Devtools 介绍 SpringBoot 提供了热部署的功能,那啥是热部署累?SpringBoot官方是这样说的:只要类路径上的文件发生更改,就会自动重新启动应用程序。在IDE中工作时,这可能是一个有用的功能...

桌前明月
今天
5
0
CSS--列表

一、列表标识项 list-style-type none:去掉标识项 disc:默认实心圆 circle:空心圆 squire:矩形 二、列表项图片 list-style-img: 取值:url(路径) 三、列表项位置 list-style-position:...

wytao1995
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部