【发布时间】:2016-09-25 00:47:22
【问题描述】:
我有一个风暴拓扑,它从 kafka 读取记录,提取记录中存在的时间戳,并在 hbase 表上进行查找,应用业务逻辑,然后使用当前记录中的最新值更新 hbase 表!!
我已经编写了一个扩展 BaseRichBolt 的自定义 hbase bolt,其中代码在 hbase 表上进行查找,并对从 kafka 读取的消息应用一些业务逻辑,然后用最新数据更新 hbase 表!
我看到的问题是,有时,bolt 以混乱的顺序接收/处理记录,因此我的应用程序认为某个特定记录已被处理,而忽略了该记录!!!由于这个原因,应用程序没有处理大量记录!
例如:
假设从kafka读取了两条记录,一条记录属于第10小时,第二条记录属于第11小时...
我的自定义 HBase 螺栓,首先处理第 11 小时记录...然后读取/处理第 10 小时记录!因为,第 11 小时记录首先被处理,所以应用程序假定第 10 小时记录已被处理并忽略第 10 小时记录!
有人可以帮我理解,为什么我的自定义 hbase bolt 没有按接收顺序处理记录吗?
我是否必须提及任何其他属性以确保螺栓按其收到的顺序处理记录?我可以尝试解决什么可能的替代方案?
仅供参考,我正在使用 hbase bolt 的字段分组,通过我想确保特定用户的所有记录都进入相同的任务!不过要提一下,考虑字段分组可能会导致问题,将我的自定义 hbase bolt 的任务数减少到 1 个任务,仍然是同样的问题!!
想知道为什么 hbase bolt 没有按照接收到的顺序读取/处理记录!!!请有人帮我谈谈你的想法!!
非常感谢。
【问题讨论】:
标签: hadoop streaming apache-kafka apache-storm