第8章 Storm Trident

在本章,我们将介绍用于微批的DRPC和Storm Trident抽象,并基于此实现一些实际用例。

本章主要包括以下内容

  • 状态保持和Trident
  • 基本Storm Trident拓扑
  • Trident内部实现
  • Trident操作
  • DRPC
  • 小试牛刀

维持其状态Trident是一个分布式实时分析框架。Trident以容错的方式在内部(如在内存中)或在外部(如Hazelcast)。它类似于处理“精确一次”(exactly once)类型事件。Trident适用于微批,如聚合、过滤等。

这里举一个例子来解释如何实现“精确一次”语义:假设读者正在计算访问博客的人数,并将计数值存储在数据库中。现在假设在数据库中存储了一个表示计数的值,并且每次处理新元组时都会增加计数值。

如果发生故障,则将通过Storm拓扑重放元组。问题是元组是否已被处理并且数据是否已经在数据库中更新了。如果是,就不应该再次更新它;如果元组没有成功处理,就必须在数据库中更新计数;如果元组已被处理但是在更新数据库中的计数值时失败,就应该更新数据库。

为了实现确保元组仅在系统中处理一次“精确一次”语义,spout应该向bolt/spout提供信息。在容错方面有3种类型的spout:事务性spout、非事务性spout和不透明事务性spout。现在,让我们来看看其中两种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.