流媒体教学





5.00/5 (1投票)
一些关于流媒体系统的推荐阅读
我可能是少数几个喜欢一本好的技术书籍的人之一。当然,写得好的博客文章、教程和探索性项目都很棒,但如果你真的想深入挖掘,书籍会是很好的资源。
由于我爱上了流数据系统,所以我觉得专注于这个领域的书籍会很合适。流媒体本身在理解方面似乎是时好时坏的。它并不总是直观的,而且往往与你以前的经验所教导的信念背道而驰。
我见过无数开发者,非常聪明的人,在流媒体系统的一些最基本概念上苦苦挣扎,我希望通过这篇文章提供一些“推荐阅读”,以帮助防止这种情况发生在你身上。
所以,废话不多说,让我们来看看几本书(不分先后顺序),它们可能会对你的旅程有所帮助。
Kafka:权威指南
Kafka 的完美入门书,涵盖了它的起源、内部原理、用途,在深入研究之前强烈推荐阅读。
当你想到流媒体时,Kafka 可能是最普遍的技术,所以理解它很重要。那么,谁比 Confluent 的团队更适合涵盖这个主题呢?这个团队由大量 Kafka 爱好者和许多最初构建它的团队成员组成。
值得注意的是,我们谈论的是 Apache Kafka 本身(不要与 Kafka Streams 混淆,Kafka Streams 是一个构建在 Kafka 之上的抽象和框架)。
Kafka:权威指南是进入 Kafka 世界的绝佳(且免费)入门点。它非常易读,提供了 Kafka 本身、它提供的价值以及其工作原理的概览。你将了解生产者、消费者、代理、集群、分区以及构成 Kafka 的所有其他大量构建块——所有这些都在第一章中。
在概述之后,你将获得一个很好的安装过程概述,以及所有帮助 Kafka 有效工作的配套应用程序和进程(例如 Zookeeper)、配置、硬件需求等方面的入门知识。一旦你熟悉了这些,你将进入编写生产者生成消息以及消费者读取消息的世界,这些部分将开始融会贯通。
这本书接下来深入探讨了细节:内部原理。你将重新审视书中前面介绍的许多概念,并深入探讨每一个概念(例如,你将不再仅仅知道分区是 Kafka 的构建块,而是将了解它们的结构、分段、索引等)。这些细节将引向实际构建管道,以及所有使其表现良好、可扩展和处理故障(这经常发生)的考虑因素。你将获得围绕管理、监控的各种其他生产导向主题,并且你应该能够带着对使用 Kafka 的一些信心离开这本书。
这本书最常见的评论之一是“我希望在与 Kafka 合作之前读过这本书”,这再真实不过了(如果你有兴趣获得 Kafka 认证,它是一个很棒的资源)。
Kafka Streams 实战
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,我可能会更倾向于后者,否则,请坚持《权威指南》。
设计数据密集型应用
可能是这份清单上最著名的书,有充分的理由。它涵盖了构建数据导向应用程序的所有方面,虽然它不只关注流媒体,但也涵盖了很多。
在这本关于数据所有方面的精彩著作中,Martin Kleppmann 将引导你踏上一段易于理解且全面的数据基础之旅。无论你的经验如何,你都能在《设计数据密集型应用》中找到适合你的东西。
Kleppmann 从基础层面开始旅程,但不要认为这只是一个一两句话的高级概述。所有流行的数据存储类型(关系型、文档型、图型等)都从可伸缩性、可维护性和可靠性方面进行了深入探讨。你还将了解底层实现(例如,B树、LSM树等)、格式化技术以及使它们分别作为数据库或数据仓库表现出色的协议。
在这个基础层之后,本书深入探讨了分布式世界,这主要是它出现在这份清单上的原因。Kafka 等流技术以及使它们变得优秀的所有概念(分区、并发、复制等)都得到了涵盖。你将深入了解隔离、锁定、序列化和时钟(它们可能不可靠)等概念(和潜在假设)。这里有很多信息需要理解,但它会影响你对流媒体和分布式应用程序的看法。
本书的最后一部分侧重于批处理和流处理,以及使两者保持一致的许多模式。你将在这里深入重新审视 Kafka(希望能结合书中前面获得的知识),以及其他发布-订阅技术和消息队列。有很多关于故障(剧透:坏事经常发生)、幂等性、微批处理、窗口等的好东西。
如果从这份清单中只读一本书——《设计数据密集型应用》会是一个不错的选择。
流媒体系统
一本关于流媒体的综合性好书,侧重于围绕它构建系统,批处理和流处理之间的权衡,Apache Beam 模型,以及各种其他优点。
可以说是我就流媒体整体观所遇到的最好的书之一。《流媒体系统》由 Google 的三位工程师撰写,他们曾任职于 DataFlow 团队,并是 Apache Beam 指导委员会的成员。
本书本身从整体上讨论了流媒体,重点关注 Beam 模型(即 Apache Beam),之所以如此,是因为 Beam 本身旨在作为各种流媒体技术(例如 Spark、Flink、Dataflow、Samza 以及无数其他技术)的接口或抽象。因此,所有代码示例都用它编写,以便它们可以很容易地在这些其他技术中识别,更重要的是,它们让你能够理解发生了**什么**。
这本书写得非常好,易于阅读,尽管内容偶尔会偏向学术(即非常详细、低级)。它充满了知识和趣闻,每章都带有一点幽默。这正是大多数开发书籍应该追求的目标。
《流媒体系统》还引入了一个常见的“是什么”、“如何做”、“何时做”、“在哪里做”的主题,当你处理流媒体问题时,它会一直伴随着你。
《流媒体系统》的另一个优点是,尽管它的名字,它并不回避提及“批处理”这个词。批处理经常出现,主要是因为 Beam 模型支持它,而且也因为它是大多数公司执行数据处理的方式。本书详细介绍了两者如何交互、并行,以及如何在它们之间取得平衡。