Storm Spout

通过实现Storm中的ISpout接口,重写其中的nextTuple、ack和fail方法,可以实现tuple流的发送、成功确认、失败重发。ISpout接口代码如下所示。

storm-kafka

storm-kafka模块目前集成中在storm(https://github.com/apache/storm)中,为storm提供读取kafka消息队列的支持,其中,KafkaSpout类继承自BaseRichSpout类,用于从kafka消息队列中读取消息发送tuple,对tuple进行成功确认和失败重发,保证kafka消息至少被处理一次。

KafkaSpout

KafkaSpout类核心逻辑的序列图如下所示。
序列图
从中可以看出,发送tuple,成功确认和失败重发都是由PartitionManager这个类完成。
在storm中,可以设置spout的并行度,也就是说可以有多个KafkaSpout实例从一个kafka队列中读取消息,而kafka作为大数据应用场景下的消息队列,其每个队列可以配置为多个partition,每个partition可以由一个消费者读取消息,这样可以保证消息消费的大吞吐量。当在storm集群中使用KafkaSpout类读取消息时,需要控制每个KafkaSpout实例读取kafka队列的哪几个partition,如果实例数等于partition数,那么每个KafkaSpout实例从一个partiton中读取消息。
在KafkaSpout类中有一个成员变量PartitionCoordinator _coordinator,_coordinator中有一个成员变量Map<Partition, PartitionManager> _managers。通过在zookeeper上保存信息,_coordinator可以在storm集群中协调各个KafkaSpout实例读取哪几个partition,并通过_managers管理当前所在KafkaSpout实例负责的partition的读取,而PartitionManager类则具体负责某个partition的读取。
当KafkaSpout实例执行nextTuple方法时,会从_coordinator中获取到PartitonManager实例,并调用该实例的next方法,而当KafkaSpout实例执行ack方法时,实际调用了PartitonManager的ack方法,而当KafkaSpout实例执行fail方法时,实际调用了PartitonManager的fail方法。PartitionManager的next、ack和fail方法具体流程如下所示。
next
ack
fail

标签:

Kylin查询源码分析

什么是Kylin Apache Kylin是一个开源的、分布式的分析型数据仓库,提供Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由 ...

阅读全文

Kylin构建源码分析

1 摘要 Kylin作为MOLAP的代表之一,其核心思想是设计cube模型,指定维度和量度,通过在维度上进行量度的预先上卷计算,保存上卷结果,以空间换时间,加速维度...

阅读全文

使用Hive存储数据实践

数据存储需求是:每天会生成大量文章数据,每条文章数据包含标题、内容、URL、发表时间等多个字段,数据后续不会更新,因此考虑使用Hive作为数据仓库存储这些...

阅读全文