65.9K
CodeProject 正在变化。 阅读更多。
Home

流媒体教学

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2020年5月15日

CPOL

7分钟阅读

viewsIcon

4893

一些关于流媒体系统的推荐阅读

An Education in Streaming

我可能是少数几个喜欢一本好的技术书籍的人之一。当然,写得好的博客文章、教程和探索性项目都很棒,但如果你真的想深入挖掘,书籍会是很好的资源。

由于我爱上了流数据系统,所以我觉得专注于这个领域的书籍会很合适。流媒体本身在理解方面似乎是时好时坏的。它并不总是直观的,而且往往与你以前的经验所教导的信念背道而驰。

An Education in Streaming

我见过无数开发者,非常聪明的人,在流媒体系统的一些最基本概念上苦苦挣扎,我希望通过这篇文章提供一些“推荐阅读”,以帮助防止这种情况发生在你身上。

所以,废话不多说,让我们来看看几本书(不分先后顺序),它们可能会对你的旅程有所帮助。

Kafka:权威指南

An Education in Streaming

Kafka 的完美入门书,涵盖了它的起源、内部原理、用途,在深入研究之前强烈推荐阅读。

当你想到流媒体时,Kafka 可能是最普遍的技术,所以理解它很重要。那么,谁比 Confluent 的团队更适合涵盖这个主题呢?这个团队由大量 Kafka 爱好者和许多最初构建它的团队成员组成。

值得注意的是,我们谈论的是 Apache Kafka 本身(不要与 Kafka Streams 混淆,Kafka Streams 是一个构建在 Kafka 之上的抽象和框架)。

Kafka:权威指南是进入 Kafka 世界的绝佳(且免费)入门点。它非常易读,提供了 Kafka 本身、它提供的价值以及其工作原理的概览。你将了解生产者、消费者、代理、集群、分区以及构成 Kafka 的所有其他大量构建块——所有这些都在第一章中。

在概述之后,你将获得一个很好的安装过程概述,以及所有帮助 Kafka 有效工作的配套应用程序和进程(例如 Zookeeper)、配置、硬件需求等方面的入门知识。一旦你熟悉了这些,你将进入编写生产者生成消息以及消费者读取消息的世界,这些部分将开始融会贯通。

这本书接下来深入探讨了细节:内部原理。你将重新审视书中前面介绍的许多概念,并深入探讨每一个概念(例如,你将不再仅仅知道分区是 Kafka 的构建块,而是将了解它们的结构、分段、索引等)。这些细节将引向实际构建管道,以及所有使其表现良好、可扩展和处理故障(这经常发生)的考虑因素。你将获得围绕管理、监控的各种其他生产导向主题,并且你应该能够带着对使用 Kafka 的一些信心离开这本书。

这本书最常见的评论之一是“我希望在与 Kafka 合作之前读过这本书”,这再真实不过了(如果你有兴趣获得 Kafka 认证,它是一个很棒的资源)。

Kafka Streams 实战

An Education in Streaming

Kafka 及其内部原理的绝佳介绍,何时使用它,所有这些都围绕着用于构建流媒体应用程序的 Kafka Streams 框架。

接着 Kafka 的话题,Bill Bejeck 的下一本书《Kafka Streams 实战》提供了一种更注重代码的方法。它几乎可以看作是前面提到的《权威指南》的修订版,但更侧重于 Kafka Streams 的实际应用。

本书涵盖了与前一本书相同的许多概念,前几章的内容也与前一本书非常相似,讨论了高级用例、何时以及何时不考虑使用 Kafka 解决问题等。

这个概述很快从第三章开始转向了信息量很大的、有针对性的章节,这些章节侧重于连接语义、窗口、有状态处理等方面。每一章都围绕并构建在之前的问题之上,并提供了如何利用 Kafka Streams 解决这些问题的代码示例。

你将了解 Kafka Streams 暴露的各种支持的 API,从提供非常类似 SQL 语法的流处理高级 DSL 到允许你在最细粒度级别操作的低级处理器 API。它关于状态的章节真正闪耀,并展示了 Kafka Streams 框架背后的一些真正潜力。

与前面提到的《Kafka:权威指南》一样,你将探索 Kafka 的许多常见设计模式和用例,以及实现它们所需的 Kafka Streams 代码。你将涵盖测试、监控以及创建生产就绪的 Kafka Streams 管道之前所期望的所有其他优秀内容。

最终,如果你正在使用 Kafka,这两本书中的任何一本都不会错,但是如果你正在使用 Kafka Streams,我可能会更倾向于后者,否则,请坚持《权威指南》。

设计数据密集型应用

An Education in Streaming

可能是这份清单上最著名的书,有充分的理由。它涵盖了构建数据导向应用程序的所有方面,虽然它不只关注流媒体,但也涵盖了很多。

在这本关于数据所有方面的精彩著作中,Martin Kleppmann 将引导你踏上一段易于理解且全面的数据基础之旅。无论你的经验如何,你都能在《设计数据密集型应用》中找到适合你的东西。

Kleppmann 从基础层面开始旅程,但不要认为这只是一个一两句话的高级概述。所有流行的数据存储类型(关系型、文档型、图型等)都从可伸缩性、可维护性和可靠性方面进行了深入探讨。你还将了解底层实现(例如,B树、LSM树等)、格式化技术以及使它们分别作为数据库或数据仓库表现出色的协议。

在这个基础层之后,本书深入探讨了分布式世界,这主要是它出现在这份清单上的原因。Kafka 等流技术以及使它们变得优秀的所有概念(分区、并发、复制等)都得到了涵盖。你将深入了解隔离、锁定、序列化和时钟(它们可能不可靠)等概念(和潜在假设)。这里有很多信息需要理解,但它会影响你对流媒体和分布式应用程序的看法。

本书的最后一部分侧重于批处理和流处理,以及使两者保持一致的许多模式。你将在这里深入重新审视 Kafka(希望能结合书中前面获得的知识),以及其他发布-订阅技术和消息队列。有很多关于故障(剧透:坏事经常发生)、幂等性、微批处理、窗口等的好东西。

如果从这份清单中只读一本书——《设计数据密集型应用》会是一个不错的选择。

流媒体系统

An Education in Streaming

一本关于流媒体的综合性好书,侧重于围绕它构建系统,批处理和流处理之间的权衡,Apache Beam 模型,以及各种其他优点。

可以说是我就流媒体整体观所遇到的最好的书之一。《流媒体系统》由 Google 的三位工程师撰写,他们曾任职于 DataFlow 团队,并是 Apache Beam 指导委员会的成员。

本书本身从整体上讨论了流媒体,重点关注 Beam 模型(即 Apache Beam),之所以如此,是因为 Beam 本身旨在作为各种流媒体技术(例如 Spark、Flink、Dataflow、Samza 以及无数其他技术)的接口或抽象。因此,所有代码示例都用它编写,以便它们可以很容易地在这些其他技术中识别,更重要的是,它们让你能够理解发生了**什么**。

这本书写得非常好,易于阅读,尽管内容偶尔会偏向学术(即非常详细、低级)。它充满了知识和趣闻,每章都带有一点幽默。这正是大多数开发书籍应该追求的目标。

《流媒体系统》还引入了一个常见的“是什么”、“如何做”、“何时做”、“在哪里做”的主题,当你处理流媒体问题时,它会一直伴随着你。

《流媒体系统》的另一个优点是,尽管它的名字,它并不回避提及“批处理”这个词。批处理经常出现,主要是因为 Beam 模型支持它,而且也因为它是大多数公司执行数据处理的方式。本书详细介绍了两者如何交互、并行,以及如何在它们之间取得平衡。

© . All rights reserved.