Kafka中kafka.common.OffsetOutOfRangeException异常的原因是什么

时间:2018-12-27 19:24:13

标签: apache-kafka

我正在使用Kafka Mirrormaker模拟到运行Spark的Elastic MapReduce集群的生产流量。这是我的设置:

1)一个Kafka Mirrormaker实例从生产Kafka实例中消费并填充测试Kafka实例

2)Kafka Mirrormaker的第二个实例从在1)中创建的测试Kafka实例中消费并发布到新的Kafka集群中。

3)Elastic MapReduce集群消耗3)中的Kafka集群。

问题是我在日志文件中看到kafka.common.OffsetOutOfRangeException错误。我想知道如何防止这些情况发生。

这是我运行EMR作业时使用的过程:

1)杀死正在运行的Mirrormaker

2)删除群集上的所有主题

3)创建所有主题

4)重新启动Mirrormaker

5)开始EMR作业

以前,我认为kafka.common.OffsetOutOfRangeException发生是因为我要更换主机。但是,即使删除/重新创建主题之后,我仍然会收到错误消息。

我是否需要在Mirrormaker或Kafka群集上进行特定设置以防止这种情况发生?

1 个答案:

答案 0 :(得分:0)

MirrorMaker仅将消息从一个群集复制到另一个群集,而不将偏移量复制。在内部,MirrorMaker使用消费者和生产者。这意味着目标群集中的消息偏移量将有所不同。假设您在源集群中有一个主题,并且保留已经删除了一些数据,因此,最早的偏移量是1000,并且您在目标集群中创建了一个新主题。来自源群集的消息1000在目标群集中的偏移量为0。

您将需要手动“平移”偏移量。例如,在使用MirrorMaker开始复制之前,您可以获取起始偏移量,然后减去目标群集中的偏移量编号。