http://www.infoq.com/cn/news/2015/03/apache-kafka-stream-data?utm_source=infoq&utm_medium=related_content_link&utm_campaign=relatedContent_articles_clk
近来,有许多关于“流处理”和“事件数据”的讨论,它们往往都与像Kafka、Storm或Samza这样的技术相关。但并不是每个人都知道如何将这种技术引入他们自己的技术栈。于是,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还对其中的若干细节进行了深入探讨,并提供了一些实现建议。感兴趣的读者可以查看这里。
相关推荐
《构建Apache Kafka流数据应用》_蒋守壮译
使用Apache Kafka构建数据流应用程序这是发行的的代码存储库。 它包含从头到尾完成本书所必需的所有支持项目文件。关于这本书Apache Kafka是一种流行的分布式流平台,可充当消息队列或企业消息系统。 它使您可以发布...
Apache Kafka作为一款强大的分布式流处理平台,为企业构建实时数据流处理系统提供了有力的支持。通过深入了解Kafka的核心概念、应用场景、架构设计和最佳实践,我们可以更好地利用这一工具,实现业务价值的最大化。...
li-apache-kafka-clients介绍li-apache-kafka-clients是在香草Apache Kafka客户端之上构建的包装Kafka客户端库。 Apache Kafka现在已成为非常流行的消息传递系统,并以其低延迟,高吞吐量和持久的消息传递而闻名。 ...
Kafka Python Fake Data Producer是一个完整的演示应用程序,可让您快速生成基于Python假比萨饼的流数据集并将其推送到Apache Kafka主题。 它提供了一个示例,说明创建大量假冒的流数据来填充Apache Kafka有多么容易...
事件驱动架构:Kafka可以作为事件源,帮助构建事件驱动架构。生产者将事件发布到Kafka主题,而消费者可以根据需要订阅这些事件,从而实现松耦合的分布式系统。 数据集成:Kafka可以用于将数据从一个应用程序或数据...
使用AWS X-Ray跟踪基于Apache Kafka构建的消息传递应用程序的端到端性能。 许可证摘要 该示例代码在经过修改的MIT许可下可用。 请参阅许可文件。 使AWS X-Ray与Apache Kafka一起使用 在高层次上,您必须做三件事: ...
使用Netty采集Kafka的数据 使用Java Netty构建一个HTTP服务器,该服务器接受一个JSON对象并将其保存到Kafka队列中。 为此,请在开发机器上设置netty / kafka。 需要Java和Maven的有效安装。 基于: : Apache ...
Apache Kafka是一个开源的流处理平台,主要用于构建实时流数据管道和应用程序。它设计用于水平扩展性、高吞吐量和容错性,已被广泛应用于各种大数据和实时应用场景中。 这个特定版本,3.5.0,为Kafka带来了一系列新...
【小程序名称】注重数据安全与隐私保护,严格遵守国家法律法规和微信平台的规定,确保用户数据的安全无虞。此外,其背后的开发团队持续迭代更新,根据用户反馈不断优化产品性能,提升服务质量,致力于打造一个贴近...
使用 Apache Flume、Apache Kafka 和 Apache Storm 的实时 Syslog 处理架构。 依赖版本 Apache Flume - 1.5.0 Apache Kafka - 0.8.1.1 先决条件 Java 1.6 或更高版本 安装(请参阅上面的依赖版本)
本篇文章中我们将学习如何...解决方案之前,先快速看看我们将使用的工具:ApacheSpark–一个通用的大规模数据快速处理引擎。Spark的批处理速度比Hadoop MapReduce快近10倍,而内存中的数据分析速度则快近100倍。更多
米鲁斯 基于集群之间的分布式,大容量复制的工具。 专为在高吞吐量,多集群环境中轻松操作而设计。 特征 动态配置:使用Kafka Connect REST API进行...Mirus围绕Apache Kafka Connect构建,提供了SourceConnector和So
最好的演示从开始,该示例在端到端流ETL管道中使用ksqlDB启动使用ksqlDB进行流处理的Kafka事件流应用程序,并启用了源连接器,该连接器从实时数据和水槽连接器连接到Elasticsearch和Kibana以进行可视化。 cp-demo还...
本书以Apache Kafka和MapRStreams为例,重点讲解如何确定使用流数据的时机、如何为多用户系统设计流式架构、为什么要求消息传递层具备某些特定功能,以及为什么需要微服务,并且描述了目前最符合流式设计需求的消息...
关于视频课程从头开始学习使用Apache Spark和Kafka构建数据流管道。 从蓝图架构开始:开发功能完备的数据流传输管道。 通过实时编码会话,动手构建管道的每个层。您将学到什么在数据流涉及的最强大和最通用的技术上...
Kafka构建在ZooKeeper同步服务之上。 它与Apache Storm和Spark非常好地集成,用于实时流式数据分析。 Kafka专为分布式高吞吐量系统而设计。 Kafka往往工作得很好,作为一个更传统的消息代理的替代品。 与其他消息...
Apache Kafka是一个分布式发布... Kafka构建在ZooKeeper同步服务之上. 它与Apache Storm 和Spark非常好地集成, 用于实时流式数据分析. 本资料主要在于介绍kafka相关的知识点,在实际工作与面试中会有一定的帮助的!!!
Apache Kafka是一个分布式流处理平台,由LinkedIn公司开发并开源。它主要用于构建实时数据流管道和应用。它可以处理消费者网站的所有动作流数据,包括页面访问量、搜索以及其他用户行为等。这些数据通常被用于实时...