近来,有许多关于“流处理”和“事件数据”的讨论,它们往往都与像KafkaStormSamza这样的技术相关。但并不是每个人都知道如何将这种技术引入他们自己的技术栈。于是,Confluent联合创始人Jay Kreps发布了《流数据平台构建实战指南》。他结合自己过去五年中在LinkedIn构建Apache Kafka的经验,介绍了如何构建一个公司范围的实时流数据中心。

他们将该实时流数据中心称为流数据平台,其出现主要是由于需要:

  • 在关系型OLTP数据库、Hadoop、Teradata、搜索系统、监控系统、OLAP数据库等若干不同的系统之间传递数据,而且这些系统处于地理上分散的环境中;
  • 进行更丰富的数据分析处理,而且延迟要低,也就是需要进行所谓的“流处理”或“复杂事件处理”。

在流数据平台出现之前,他们是通过系统之间的点对点连接来实现数据传输和处理。但随着时间推移,系统之间的数据传输管道越来越复杂(如下图所示):

这些管道存在着各种各样的问题,如日志数据管道会丢失信息,Oracle实例之间的管道无法供其它系统使用等。而且,在不同的地方增加数据中心时,需要复制所有的数据流。也就是说,这些管道创建的时候很简单,但扩展非常麻烦。更糟糕的是,过高的复杂性常常意味着不可靠,数据质量可能会成为问题。比如Jay举了一个例子,他们曾发现某两个系统的数据不一致,但当它们将这两个系统的数据与另外一个系统的数据进行对比时发现,第三个系统中的数据与两者之中的任何一个都不相同。

另外,除了将数据从一个地方搬运到另外一个地方,他们还希望可以对数据做些处理。本来,Hadoop已经提供了这样一个平台,它具备批处理、数据归档等功能。但是,它无法满足低延时应用系统的需求。

因此,在2010年,他们决定构建一个系统,专门用于捕获数据流。该系统要既能用于系统集成,又能对数据流进行实时处理。这就是Apache Kafka的起源。之后,他们有了“流数据平台”的构想(如下图所示):

他们的系统架构因而变得更加清晰整洁(如下图所示):

围绕Apache Kafka构建的、以流为中心数据架构

在上述架构中,Kafka是作为一个全局数据管道。每个系统都向这个中心管道发送数据或者从中获取数据。应用程序或流处理程序可以接入管道并创建新的派生流。这些派生流又可以供其它各种系统使用。现如今,在LinkedIn,Kafka每天处理超过5000亿个事件。它成为各种系统之间数据流的基础、Hadoop数据的核心管道以及流处理的中心。

接下来,Jay对上述架构进行了更为详细的介绍。

首先,他对流数据的概念进行了特别说明。他指出,每项业务大体上都可以看作是事件流。比如,零售是下订单、销售、发货、退货的事件流。所谓的“大数据”就是捕获这些事件,用于分析、优化和决策。在数据库方面,虽然它存储的是数据的当前状态,但实际上,数据库中的数据也是事件流的结果,即经过一系列的操作才能到达当前状态。比如,Oracle、MySQL会按时间先后记录每行数据的每次变化。

其次,它详细说明了流数据平台的两个用途:

  • 数据集成——借助流数据平台,应用程序集成时不需要知道原始数据源的细节,发布数据时也不需要知道哪个应用程序会消费和加载这些数据。增加新系统,也只需要接入现有的流数据平台就可以。Hadoop也能够维护组织所有数据的一个副本,然后作为一个“数据湖”或“企业数据中心”,但Hadoop使用HDFS与数据源集成,这非常耗时,而且它的最终结果只能供自己使用;
  • 流处理——流处理的结果是一个新的派生流。这个流与其它任何流一样,可以同等对待,供其它集成到流数据平台的系统使用。流处理过程在应用程序中使用简单的代码就可以实现。这些代码接入事件流并对外发布新的事件流。但借助一些流处理框架,如Storm、Samza,会更容易实现。

然后,他列举了流数据平台需要具备的功能:

  • 它必须足够可靠,能够处理关键更新。比如,可以复制数据库的变更日志,而且能够按顺序传输,并保证不丢失信息;
  • 它必须能够支持足够高的吞吐量;
  • 它必须能够缓存或持久化数据,支持与批处理系统(如Hadoop)的集成;
  • 它必须能够为实时应用程序提供低延时数据传输和处理;
  • 它必须能够扩展,进而承担组织的全部负载;
  • 它必须支持与流处理系统的紧密集成。

Apache Kafka就是这样一个为流数据而设计的分布式系统。它具有容错能力、高吞吐量、横向扩展等特性,并且支持地理上分散的数据流和数据流处理。Kafka的关键抽象是一个结构化的更新提交日志(如下图所示):

生产者将一连串的记录追加到提交日志,然后任意数量的消费者可以连续地以流的方式使用这些记录,而延迟只有几毫秒。每个消费者都记录自己在日志中的位置,彼此之间互不影响。另外,还有一个关键的方面,就是Kafka可以处理持久化。

最后,Jay分析了流数据平台与消息系统、企业服务总线和数据仓库的不同之处。与消息系统相比,它更多的是一个数据中心,可以更好地与批处理系统集成,并且提供了兼容流处理的语义。它体现了许多企业服务总线的思想,但相比之下其实现方式更好,因为它实现了数据流与数据转换的解耦。另外,该平台并不会取代数据仓库。实际上,它可以为数据仓库提供数据。

此外,Jay还对其中的若干细节进行了深入探讨,并提供了一些实现建议。感兴趣的读者可以查看这里


感谢郭蕾对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

电商购物体验的把控与升级,传统制造企业的电商摸索之路,数据支撑的购物个性化推荐,O2O平台架构设计。更多电商话热点在ArchSummit深圳2015大会“电商和零售业的转型”专题

用Apache Kafka构建流数据平台的更多相关文章

  1. 用Apache Kafka构建流数据平台的建议

    在<流数据平台构建实战指南>第一部分中,Confluent联合创始人Jay Kreps介绍了如何构建一个公司范围的实时流数据中心.InfoQ前期对此进行过报道.本文是根据第二部分整理而成. ...

  2. Apache Kafka分布式流处理平台及大厂面试宝典v3.0.0

    概述 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 Apache Kafka官网地址 http://kafka.apache.org/ 最新版本为 3.0.0 Apach ...

  3. 重磅开源 KSQL:用于 Apache Kafka 的流数据 SQL 引擎 2017.8.29

    Kafka 的作者 Neha Narkhede 在 Confluent 上发表了一篇博文,介绍了Kafka 新引入的KSQL 引擎——一个基于流的SQL.推出KSQL 是为了降低流式处理的门槛,为处理 ...

  4. 大数据 -- Cloudera Manager(简称CM)+CDH构建大数据平台

    一.Cloudera Manager介绍 Cloudera Manager(简称CM)是Cloudera公司开发的一款大数据集群安装部署利器,这款利器具有集群自动化安装.中心化管理.集群监控.报警等功 ...

  5. 《基于Apache Kylin构建大数据分析平台》

    Kyligence联合创始人兼CEO,Apache Kylin项目管理委员会主席(PMC Chair)韩卿 武汉市云升科技发展有限公司董事长,<智慧城市-大数据.物联网和云计算之应用>作者 ...

  6. CDH构建大数据平台-使用自建的镜像地址安装Cloudera Manager

    CDH构建大数据平台-使用自建的镜像地址安装Cloudera Manager 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.搭建CM私有仓库 详情请参考我的笔记: http ...

  7. CDH构建大数据平台-配置集群的Kerberos认证安全

     CDH构建大数据平台-配置集群的Kerberos认证安全 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 当平台用户使用量少的时候我们可能不会在一集群安全功能的缺失,因为用户少,团 ...

  8. CDH构建大数据平台-Kerberos高可用部署【完结篇】

    CDH构建大数据平台-Kerberos高可用部署[完结篇] 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.安装Kerberos相关的软件包并同步配置文件 1>.实验环境 ...

  9. kafka实时流数据架构

    初识kafka https://www.cnblogs.com/wenBlog/p/9550039.html 简介 Kafka经常用于实时流数据架构,用于提供实时分析.本篇将会简单介绍kafka以及它 ...

随机推荐

  1. Angularjs 通过WebApi 下载excel

    如果想知道 AngularJs 通过WebAPI 下载Excel.请看下文,这里仅提供了一种方案. 服务器端代码如下: protected HttpResponseMessage GenereateE ...

  2. 子查询注意这几点, 就可以写出好的sql语句

    执行sql时子查询的语句一般优先执行 理论上多表查询效率是高于子查询(根据子查询不值一个查询语句可能会有多个from但是多表查询只产生一个from), 但是在oracle中子查询效率一般会高于多表查询

  3. 盒模型------CSS

    盒子的内心世界 1.模型 通过CSS的眼睛 在CSS看来,HTML的所有元素都被看成了盒子:段落,标题,块引用,列表,列表项等.甚至内联元素. 盒子的组成 内容区(content):包含内容(文本或图 ...

  4. 【贪心】 BZOJ 3252:攻略

    3252: 攻略 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 261  Solved: 90[Submit][Status][Discuss] De ...

  5. Matlab计算矩阵间距离

    夜深人静时分,宿舍就我自己,只有蚊子陪伴着我,我慢慢码下这段文字............ 感觉知识结构不完善:上学期看论文,发现类间离散度矩阵和类内离散度矩阵,然后百度,找不到,现在学模式识别,见了, ...

  6. CSRF防范策略研究

    目录 0x1:检查网页的来源 0x2:检查内置的隐藏变量 0x3:用POST不用GET 检查网页的来源应该怎么做呢?首先我们应该检查$_SERVER[“HTTP_REFERER”]的值与来源网页的网址 ...

  7. hdu 4192

    dfs全排列  加  模拟计算 #include <iostream> #include <cstdio> #include <cstdlib> #include ...

  8. HDU4545+LCS

    最长公共子序列. /* LCS 最长公共子序列 */ #include<stdio.h> #include<string.h> #include<stdlib.h> ...

  9. jQuery 的 $("someobjectid”).event() 的绑定

    经验证,jquery 的 $("someobjectid”).event()事件绑定,如果放在某个会被重新初始化的对象里,就会被多次绑定. 如下 <div id="divID ...

  10. Android 设置EditText光标位置

    Android中有很多可编辑的弹出框,其中有些是让我们来修改其中的字符,这时光标位置定位在哪里呢? 刚刚解了一个bug是关于这个光标的位置的,似乎Android原生中这种情况是把光标定位到字符串的最前 ...