![](/img/trans.png)
[英]Manipulating JSON messages from Kafka topic using Logstash filter
[英]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配置,对于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.