一、问题描述
今天在做 storm 斜街 kafka 作业的时候,storm 的 spout 作为 kafka 的消费者,接收到消息发送到 bolt 进行输出,发现 storm 一直提交的都是同样的偏移量,这就导致了重复消费数据。
二、解决方案
在通过看 GitHub 上官方的示例后,发现是自己的 bolt 在输出数据之后没有发送 ack,这就导致了作为消费者的 spout 不会向 kafka 更新 offset,在加上 ack 后就 ok 了。
代码:
public void execute(Tuple input) {
String log = input.getString(0);
if(log.length() > 0) {
System.out.println("【info, partition1: hive log】: " + log);
}
collector.ack(input); //发送 ack 确认
}