第8章 Storm Trident
在本章,我们将介绍用于微批的DRPC和Storm Trident抽象,并基于此实现一些实际用例。
本章主要包括以下内容
- 状态保持和Trident
- 基本Storm Trident拓扑
- Trident内部实现
- Trident操作
- DRPC
- 小试牛刀
8.1 状态保持和Trident
维持其状态Trident是一个分布式实时分析框架。Trident以容错的方式在内部(如在内存中)或在外部(如Hazelcast)。它类似于处理“精确一次”(exactly once)类型事件。Trident适用于微批,如聚合、过滤等。
这里举一个例子来解释如何实现“精确一次”语义:假设读者正在计算访问博客的人数,并将计数值存储在数据库中。现在假设在数据库中存储了一个表示计数的值,并且每次处理新元组时都会增加计数值。
如果发生故障,则将通过Storm拓扑重放元组。问题是元组是否已被处理并且数据是否已经在数据库中更新了。如果是,就不应该再次更新它;如果元组没有成功处理,就必须在数据库中更新计数;如果元组已被处理但是在更新数据库中的计数值时失败,就应该更新数据库。
为了实现确保元组仅在系统中处理一次“精确一次”语义,spout应该向bolt/spout提供信息。在容错方面有3种类型的spout:事务性spout、非事务性spout和不透明事务性spout。现在,让我们来看看其中两种spout。
8.1.1 事务性spout
让我们来看看Trident spout如何处理元组以及其特征是什么。
- Trident以小批量方式处理元组。
- 每个批次都有唯一的事务ID。
- Trident确保每个元组都是经过批处理的,因此不会跳过任何元组。
- 具有给定事务ID的批次始终相同。如果一个批次被重新处理,那么这个批次将具有相同的事务ID和元组集。 ...
Get 实时数据处理和分析指南 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.