Stream Processing with Apache Flink - Fundamentals,Implementation,and Operation of Streaming Applications
应用Apache Flink进行流式处理 - 流式应用的架构、实现和操作
作者: Fabian Hueske (费比安 韦斯克), Vasiliki Kalavri (瓦西利基 卡拉夫里)
如果是相对Flink有跟深入的了解,除了查看官方文档和源码外,这里推荐可以看下这本书,如果支持原版的可以网上查询购买,书籍详细信息可访问 OREILLY 官网 Books & Videos。后续有时间我可能会更新书中比较重要和精彩的部分的翻译吧。先释放出这本书的目录,大家可以参考这本书的目录对相应的知识点进行了解和学习。
书中源码可以访问 GitHub streaming-with-flink
catalogue | 目录 |
---|---|
1. Preface | 前言 |
a. What You Will Learn in This Book | 你将在本书中学到什么 |
b. Conventions Used in This Book | 本书中使用的约定 |
c. Using Code Examples | 使用代码示例 |
d. O’Reilly Online Learning | O’Reilly在线学习 |
e. How to Contact Us | 如何联系我们 |
f. Acknowledgments | 致谢 |
2. 1. Introduction to Stateful Stream Processing | 有状态流处理简介 |
a. Traditional Data Infrastructures | 传统数据基础架构 |
i. Transactional Processing | 事务性处理 |
ii. Analytical Processing | 分析处理 |
b. Stateful Stream Processing | 有状态的流处理 |
i. Event-Driven Applications | 事件驱动的应用程序 |
ii. Data Pipelines | 数据管道 |
iii. Streaming Analytics | 流式分析 |
c. The Evolution of Open Source Stream Processing | 开源流处理的演进 |
i. A Bit of History | 一点历史 |
d. A Quick Look at Flink | 快速浏览Flink |
i. Running Your First Flink Application | 运行您的第一个Flink应用程序 |
e. Summary | 小结 |
3. 2. Stream Processing Fundamentals | 流处理基础 |
a. Introduction to Dataflow Programming | Dataflow编程简介 |
i. Dataflow Graphs | 数据流图 |
ii. Data Parallelism and Task Parallelism | 数据并行与Task并行 |
iii. Data Exchange Strategies | 数据交换策略 |
b. Processing Streams in Parallel | 并行处理流 |
i. Latency and Throughput | 延迟和吞吐量 |
ii. Operations on Data Streams | 数据流上的Operation |
c. Time Semantics | 时间语义 |
i. What Does One Minute Mean in Stream Processing? | 流处理中的一分钟意味着什么? |
ii. Processing Time | 处理时间 |
iii. Event Time | 事件时间 |
iv. Watermarks | 水位线 |
v. Processing Time Versus Event Time | 处理时间与事件时间 |
d. State and Consistency Models | 状态和一致性模型 |
i. Task Failures | 任务失败 |
ii. Result Guarantees | 结果保证 |
e. Summary | 小结 |
4. 3. The Architecture of Apache Flink | Apache Flink的体系结构 |
a. System Architecture | 系统架构 |
i. Components of a Flink Setup | Flink设置的组件 |
ii. Application Deployment | 应用程序部署 |
iii. Task Execution | Task执行 |
iv. Highly Available Setup | 高度可用的设置 |
b. Data Transfer in Flink | Flink中的数据传输 |
i. Credit-Based Flow Control | 基于信用的流量控制 |
ii. Task Chaining | Task链 |
c. Event-Time Processing | 事件时间处理 |
i. Timestamps | 时间戳 |
ii. Watermarks | 水位线 |
iii. Watermark Propagation and Event Time | 水位线传播和事件时间 |
iv. Timestamp Assignment and Watermark Generation | 时间戳分配和水位线生成 |
d. State Management | 状态管理 |
i. Operator State | Operator状态 |
ii. Keyed State | Keyed状态 |
iii. State Backends | 状态后端 |
iv. Scaling Stateful Operators | 扩展有状态的Operator |
e. Checkpoints, Savepoints, and State Recovery | Checkpoints、Savepoints和状态恢复 |
i. Consistent Checkpoints | 一致的Checkpoint |
ii. Recovery from a Consistent Checkpoint | 从一致的Checkpoint恢复 |
iii. Flink’s Checkpointing Algorithm | Flink的Checkpoint算法 |
iv. Performace Implications of Checkpointing | Checkpoint的性能影响 |
v. Savepoints | Savepoint |
f. Summary | 小节 |
5. 4. Setting Up a Development Environment for Apache Flink | 为Apache Flink设置开发环境 |
a. Required Software | 软件要求 |
b. Run and Debug Flink Applications in an IDE | 在IDE中运行和调试Flink应用程序 |
i. Import the Book’s Examples in an IDE | 在IDE中导入Book的示例 |
ii. Run Flink Applications in an IDE | 在IDE中运行Flink应用程序 |
iii. Debug Flink Applications in an IDE | 在IDE中调试Flink应用程序 |
c. Bootstrap a Flink Maven Project | 引导Flink Maven项目 |
d. Summary | 小节 |
6. 5. The DataStream API (v1.7) | DataStream API(v1.7) |
a. Hello, Flink! | Hello, Flink! |
i. Set Up the Execution Environment | 设置执行环境 |
ii. Read an Input Stream | 读取输入流 |
iii. Apply Transformations | 应用转换 |
iv. Output the Result | 输出结果 |
v. Execute | 执行 |
b. Transformations | 转换 |
i. Basic Transformations | 基本转换 |
ii. KeyedStream Transformations | KeyedStream转换 |
iii. Multistream Transformations | 多流转换 |
iv. Distribution Transformations | 分布变换 |
c. Setting the Parallelism | 设置并行度 |
d. Types | 类型 |
i. Supported Data Types | 支持的数据类型 |
ii. Creating Type Information for Data Types | 为数据类型创建类型信息 |
iii. Explicitly Providing Type Information | 明确提供类型信息 |
e. Defining Keys and Referencing Fields | 定义key和引用字段 |
i. Field Positions | 字段位置 |
ii. Field Expressions | 字段表达 |
iii. Key Selectors | key选择器 |
f. Implementing Functions | 实现Functions |
i. Function Classes | Functions类 |
ii. Lambda Functions | Lambda函数 |
iii. Rich Functions | 符函数 |
g. Including External and Flink Dependencies | 包括外部和Flink依赖项 |
h. Summary | 小节 |
7. 6. Time-Based and Window Operators | 基于时间和窗口的Operator |
a. Configuring Time Characteristics | 配置时间特征 |
i. Assigning Timestamps and Generating Watermarks | 分配时间戳和生成Watermark |
ii. Watermarks, Latency, and Completeness | 水位线、延迟和完整性 |
b. Process Functions | 处理Functions |
i. TimerService and Timers | TimerService和定时器 |
ii. Emitting to Side Outputs | 发射到侧面输出 |
iii. CoProcessFunction | CoProcessFunction |
c. Window Operators | 窗口Operator |
i. Defining Window Operators | 定义窗口Operator |
ii. Built-in Window Assigners | 内置窗口分配器 |
iii. Applying Functions on Windows | 在Windows上应用功能 |
iv. Customizing Window Operators | 自定义窗口运算符 |
d. Joining Streams on Time | 按时加入Streams |
i. Interval Join | 间隔加入 |
ii. Window Join | 窗口加入 |
e. Handling Late Data | 处理迟到的数据 |
i. Dropping Late Events | 放弃迟到的事件 |
ii. Redirecting Late Events | 重定向延迟事件 |
iii. Updating Results by Including Late Events | 通过包含延迟事件来更新结果 |
f. Summary | 小节 |
8. 7. Stateful Operators and Applications | 有状态的Operator和应用 |
a. Implementing Stateful Functions | 实现有状态的函数 |
i. Declaring Keyed State at RuntimeContext | 在RuntimeContext中声明keyed状态 |
ii. Implementing Operator List State with the ListCheckpointed Interface | 使用ListCheckpointed接口实现Operator列表状态 |
iii. Using Connected Broadcast State | 使用连接广播状态 |
iv. Using the CheckpointedFunction Interface | 使用CheckpointedFunction接口 |
v. Receiving Notifications About Completed Checkpoints | 接收有关已完成Checkpoint的通知 |
b. Enabling Failure Recovery for Stateful Applications | 为有状态应用程序启用故障恢复 |
c. Ensuring the Maintainability of Stateful Applications | 确保有状态应用的可维护性 |
i. Specifying Unique Operator Identifiers | 指定唯一的Operator标识符 |
ii. Defining the Maximum Parallelism of Keyed State Operators | 定义keyed状态算子的最大并行性 |
d. Performance and Robustness of Stateful Applications | 状态应用的性能和稳健性 |
i. Choosing a State Backend | 选择状态后端 |
ii. Choosing a State Primitive | 选择状态原始 |
iii. Preventing Leaking State | 防止泄漏状态 |
e. Evolving Stateful Applications | 不断发展的有状态应用 |
i. Updating an Application without Modifying Existing State | 更新应用程序而不修改现有状态 |
ii. Removing State from an Application | 从应用程序中删除状态 |
iii. Modifying the State of an Operator | 修改Operator的状态 |
f. Queryable State | 可查询状态 |
i. Architecture and Enabling Queryable State | 架构和启用可查询状态 |
ii. Exposing Queryable State | 公开可查询状态 |
iii. Querying State from External Applications | 从外部应用程序查询状态 |
g. Summary | 小节 |
9. 8. Reading from and Writing to External Systems | 读写外部系统 |
a. Application Consistency Guarantees | 应用程序一致性保证 |
i. Idempotent Writes | 幂等性写 |
ii. Transactional Writes | 事务性写 |
b. Provided Connectors | 提供连接器 |
i. Apache Kafka Source Connector | Apache Kafka源连接器 |
ii. Apache Kafka Sink Connector | Apache Kafka Sink连接器 |
iii. Filesystem Source Connector | 文件系统源连接器 |
iv. Filesystem Sink Connector | 文件系统Sink连接器 |
v. Apache Cassandra Sink Connector | Apache Cassandra Sink连接器 |
c. Implementing a Custom Source Function | 实现自定义源方法 |
i. Resettable Source Functions | 可复位的源功能 |
ii. Source Functions, Timestamps, and Watermarks | 源函数,时间戳和水位线 |
d. Implementing a Custom Sink Function | 实现自定义Sink功能 |
i. Idempotent Sink Connectors | 幂等性Sink连接器 |
ii. Transactional Sink Connectors | 事务性Sink连接器 |
e. Asynchronously Accessing External Systems | 异步访问外部系统 |
f. Summary | 小节 |
10. 9. Setting Up Flink for Streaming Applications | 为流式应用程序设置Flink |
a. Deployment Modes | 部署模式 |
i. Standalone Cluster | 独立群集 |
ii. Docker | Docker |
iii. Apache Hadoop YARN | Apache Hadoop YARN |
iv. Kubernetes | Kubernetes |
b. Highly Available Setups | 高可用的设置 |
i. HA Standalone Setup | HA独立安装程序 |
ii. HA YARN Setup | HA YARN设置 |
iii. HA Kubernetes Setup | HA Kubernetes设置 |
c. Integration with Hadoop Components | 与Hadoop组件集成 |
d. Filesystem Configuration | 文件系统配置 |
e. System Configuration | 系统配置 |
i. Java and Classloading | Java和类加载 |
ii. CPU | CPU |
iii. Main Memory and Network Buffers | 主存储器和网络缓冲器 |
iv. Disk Storage | 磁盘存储 |
v. Checkpointing and State Backends | Checkpoint和状态后端 |
vi. Security | 安全 |
f. Summary | 小节 |
11. 10. Operating Flink and Streaming Applications | 运行Flink和流式应用程序 |
a. Running and Managing Streaming Applications | 运行和管理流应用程序 |
i. Savepoints | Savepoint |
ii. Managing Applications with the Command-Line Client | 使用命令行客户端管理应用程序 |
iii. Managing Applications with the REST API | 使用REST API管理应用程序 |
iv. Bundling and Deploying Applications in Containers | 在容器中捆绑和部署应用程序 |
b. Controlling Task Scheduling | 控制Task调度 |
i. Controlling Task Chaining | 控制Task链 |
ii. Defining Slot-Sharing Groups | 定义Slot共享组 |
c. Tuning Checkpointing and Recovery | 调整Checkpoint和恢复 |
i. Configuring Checkpointing | 配置Checkpoint |
ii. Configuring State Backends | 配置状态后端 |
iii. Configuring Recovery | 配置恢复 |
d. Monitoring Flink Clusters and Applications | 监控Flink群集和应用程序 |
i. Flink Web UI | Flink Web UI |
ii. Metric System | Metric系统 |
iii. Monitoring Latency | 监控延迟 |
e. Configuring the Logging Behavior | 配置日志记录行为 |
f. Summary | 小节 |
12. 11. Where to Go from Here? | 下一步? |
a. The Rest of the Flink Ecosystem | Flink生态系统的其余部分 |
i. The DataSet API for Batch Processing | 用于批处理的DataSet API |
ii. Table API and SQL for Relational Analysis | 用于关系分析的Table API和SQL |
iii. FlinkCEP for Complex Event Processing and Pattern Matching | FlinkCEP用于复杂事件处理和模式匹配 |
iv. Gelly for Graph Processing | 用于图处理的Gelly |
b. A Welcoming Community | 欢迎的社区 |
13. Index | 索引 |
本书将向您介绍使用Apache Flink进行流式处理时需要了解的所有内容。 它由11章组成,希望能够讲述一个连贯的故事。 虽然有些章节是描述性的,旨在介绍高级设计概念,但其他章节则更具实际操作性并包含许多代码示例。
虽然我们打算在编写本书时以章节顺序阅读本书,但熟悉章节内容的读者可能希望跳过它。 其他人对立即编写Flink代码感兴趣可能需要先阅读实用章节。 在下文中,我们将简要介绍每章的内容,以便您可以直接跳转到您最感兴趣的章节。
第1章概述了有状态流处理,数据处理应用程序体系结构,应用程序设计以及流处理相对于传统方法的好处。 它还简要介绍了在本地Flink实例上运行第一个流应用程序的情况。
第2章讨论了流处理的基本概念和挑战,独立于Flink。
第3章介绍了Flink的系统架构和内部构件。 它讨论了流式应用程序中的分布式体系结构,时间和状态处理,以及Flink的容错机制。
第4章介绍如何设置开发和调试Flink应用程序的环境。
第5章介绍了Flink的DataStream API的基础知识。您将学习如何实现DataStream应用程序以及支持哪些流转换,函数和数据类型。
第6章讨论DataStream API的基于时间的operator。这包括窗口operator和基于时间的连接以及在流应用程序中处理时间时提供最大灵活性的过程函数。
第7章解释了如何实现有状态函数并讨论了有关该主题的所有内容,例如状态函数的性能,健壮性和演变。它还显示了如何使用Flink的可查询状态。
第8章介绍了Flink最常用的源和Sink连接器。它讨论了Flink的端到端应用程序一致性方法,以及如何实现自定义连接器从外部系统中提取数据和向外部系统发送数据。
第9章讨论如何在各种环境中设置和配置Flink集群。
第10章介绍了全天候运行的流应用程序的操作,监视和维护。
最后第11章包含可用于提问,参加Flink相关事件以及了解Flink当前如何使用的资源。