Kafka MirrorMaker的消费者没有从主题中获取所有消息

时间:2015-10-09 08:43:32

标签: scala apache-kafka

我正在尝试设置Kafka镜像机制,但似乎来自源Kafka集群的Kafka MirrorMaker消费者只有在镜像制作器进程启动时才从新的传入数据读取主题,即它不会读取以前主题中历史保存的数据。

我正在使用Kafka MirrorMaker类:​​

/bin/kafka-run-class.sh kafka.tools.MirrorMaker --consumer.config consumer.config --num.streams 2 --producer.config producer.config --whitelist=".*"

consumer.config从Kafka源群集中读取,如下:

zookeeper.connect=127.0.0.1:2181

zookeeper.connection.timeout.ms=6000

group.id=kafka-mirror

要生成新Kafka镜像群集的

producer.config设置:

metadata.broker.list=localhost:9093

producer.type=sync

compression.codec=none

serializer.class=kafka.serializer.DefaultEncoder

有没有办法定义Kafka MirrorMaker的使用者从我的源Kafka群集的主题的开头读取?有点奇怪,因为我在consumer.config设置中定义了一个新的消费者群体(kafka-mirror),所以消费者应该只从offset 0读取,即从主题的开头。

非常感谢提前!

3 个答案:

答案 0 :(得分:4)

查看Kafka使用者配置中的auto.offset.reset参数。

来自Kafka文档:

  

auto.offset.reset最大

     

当Zookeeper中没有初始偏移量时,或者如果有   偏移量超出范围:   *最小:自动将偏移重置为最小偏移   *最大:自动将偏移重置为最大偏移   *其他任何事情:向消费者抛出异常。如果将此设置为最大,则消费者可能会在数量时丢失一些消息   分区,对于它所订阅的主题,在代理上进行更改。至   在分区添加期间防止数据丢失,将auto.offset.reset设置为   最小

因此,对smallest使用auto.offset.reset可以解决您的问题。

答案 1 :(得分:3)

在消费者属性中,添加

auto.offset.reset=earliest

这应该有效

答案 2 :(得分:0)

答案很晚,但这对某些仍在寻找的人可能会有帮助。

到目前为止,kafka mirror不支持此功能。有一个开放的缺陷。KafkaMirror