如何从头到尾阅读整个Kafka主题,而无需更改group.id且不了解主题的分区

时间:2018-10-16 18:30:06

标签: apache-kafka kafka-consumer-api

我正在阅读Kafka主题,并且提交了读取的偏移量。

我能以某种方式使用相同的group.id而不寻找suggested here的特定分区,从头到尾重新阅读整个主题吗?

使用Kafka 1.1 我的伪代码:

var config = new Dictionary<string, object>
{
 { "group.id", "NCC1"},
 ...
 { "enable.auto.commit", "false"},
 { "default.topic.config", new Dictionary<string, object>
 {
  { "auto.offset.reset", "earliest" } 
 }
 }
};      

using (var consumer = new Consumer<string, string>(config, new StringDeserializer(Encoding.UTF8), new StringDeserializer(Encoding.UTF8)))
{
  consumer.Subscribe(new string[] { topic });
  consumer.OnMessage += (_, msg) =>
  {
    // DO SOMETHING
    onsumer.CommitAsync(msg);
  };

2 个答案:

答案 0 :(得分:0)

Kafka允许您重置特定主题和组ID的偏移量。重播的可能性实际上是Kafka的卖点之一。

您可以使用kafka-streams-application-reset命令行工具作为documented here来做到这一点。

另一种方法是使用in this blog中所述的kafka-consumer-groups命令行工具。如果您使用Windows,则另一种方法可能会很有趣,因为没有提供kafka-streams-application-reset.sh的等效批处理文件。

很明显,只要事件仍在主题中,就可以向后移动偏移量。从主题中删除的事件无法重播。

编辑

我认为您的问题与this one

非常相似

答案 1 :(得分:0)

您可以使用kafka-consumer-group重置现有组ID的偏移量。

kafka-consumer-groups --bootstrap-server <kafkahost:port> --group <group_id> --topic <topic_name> 
--reset-offsets --to-earliest --execute

它将最早重置给定主题和group.id的偏移量。

您可以在此处看到更多选项:

https://cwiki.apache.org/confluence/display/KAFKA/KIP-122%3A+Add+Reset+Consumer+Group+Offsets+tooling