繁体   English   中英

Logstash 5.1.1 kafka输入未获取有关该主题的现有消息

[英]Logstash 5.1.1 kafka input doesn't pick up existing messages on topic

我有以下带有kafka输入的logstash配置

input {
  kafka {
    bootstrap_servers => "localhost:9092"
    topics => ["mytopic"]
  }
}
filter {
  json {
    source => "message"
  }
}
output {
  stdout {
    codec => rubydebug
  }
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "my_index"
    codec => "json"
    document_id => "%{id}"
    doc_as_upsert => true
    action => "update"
  }
}

我面临的问题是,当我运行logstash时,它不会接收有关该主题的旧消息。 我的印象是,logstash第一次运行时,它将拾取尚未使用的某个主题上的所有消息。 我检查了一下这是一个新主题,并且其中包含的消息在开始运行时未被logstash接收。 它确实会拾取主题运行时出现在主题上的消息,而不是主题开始之前存在的消息。 我是否在配置中缺少某些内容,或者是输入本身的古怪之处。 信息的保证对于我的业务需求至关重要。

由于您尚未为kafka指定组ID,因此重要的注意事项如下:

  • Kafka group.id(logstash kafka配置中的group_id)设置为logstash的默认值,即“ logstash”
  • logstash中enable.auto.commit(enable_auto_commit)的默认Kafka值为“ true”
  • Kafka auto.offset.reset(auto_offset_reset)在logstash中没有默认值,因此我假设已使用最新的Kafka默认值。

因此,当您在某个主题上运行使用者时,如果它无法获取该主题中已有的消息,则可能发生以下两种情况之一:

  1. 不存在与使用者具有相同组ID的现有组,因此使用Kafka默认的auto.offset.reset最新值default,使用者将忽略已经存在的消息。
  2. 有一个具有相同组ID(“ logstash”)的现有组,并且具有此组ID的某些使用者已经使用了现有消息并提交了偏移量(该另一个使用者可能是您之前或其他某些使用者使用的相同的组ID)。 这意味着该组中的其他使用者将不会重新使用这些消息,除非以某种方式明确指示这样做。

因此,您可能想要做的是设置一些Kafka配置,对于logstash,您应该可以设置

group_id =>“ some_random_group”

auto_offset_reset =>“最早”

如果现在运行使用者,则因为some_random_group没有现有的偏移量且重置最早,因此使用者应使用主题中的所有现有消息并提交偏移量。 这意味着,如果在使用完所有消息后再次运行使用者,它将不会使用现有消息。

您应该将kafka输入插件设置auto_offset_reset设置为“最早”。

input {
  kafka {
    bootstrap_servers => "localhost:9092"
    auto_offset_reset => "earliest"
    topics => ["mytopic"]
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM