项目场景:
filebeat 7.10
kafka 0.11
windows 10
filebeat使用kafka作为input,从kafka读取数据到ElasticSearch
官方文档
问题描述:
根据kafka input 官方文档配置好filebeat.yml,并启动filbeat从指定kafka的某topic读取数据。 kafka的配置是正常的,已经在其它环境尝试过生产\消费数据。
filbeat报如下错误:
ERROR [kafka input] kafka/input.go:155 Error initializing kafka consumer group{"hosts": ["127.0.0.1:9092"], "error": "kafka: client has run out of available brokers to talk to (Is your cluster reachable?)"}
kafka也会报错:
[2020-12-16 10:32:25,863] ERROR Closing socket for 127.0.0.1:9092-127.0.0.1:2014 because of error (kafka.network.Processor)
org.apache.kafka.common.errors.InvalidRequestException: Error getting request for apiKey: 3 and apiVersion: 5
Caused by: java.lang.IllegalArgumentException: Invalid version for API key METADATA: 5
at org.apache.kafka.common.protocol.ApiKeys.schemaFor(ApiKeys.java:173)
at org.apache.kafka.common.protocol.ApiKeys.requestSchema(ApiKeys.java:141)
at org.apache.kafka.common.protocol.ApiKeys.parseRequest(ApiKeys.java:149)
at org.apache.kafka.common.requests.AbstractRequest.getRequest(AbstractRequest.java:112)
at kafka.network.RequestChannel$Request.liftedTree2$1(RequestChannel.scala:99)
at kafka.network.RequestChannel$Request.<init>(RequestChannel.scala:93)
at kafka.network.Processor$$anonfun$processCompletedReceives$1.apply(SocketServer.scala:517)
at kafka.network.Processor$$anonfun$processCompletedReceives$1.apply(SocketServer.scala:510)
at scala.collection.Iterator$class.foreach(Iterator.scala:891)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1334)
at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
at kafka.network.Processor.processCompletedReceives(SocketServer.scala:510)
at kafka.network.Processor.run(SocketServer.scala:436)
at java.lang.Thread.run(Thread.java:748)
原因分析:
根据filebeat的报错,无法从kafka正常消费数据;kafka的报错关键是:
Error getting request for apiKey: 3 and apiVersion: 5
Caused by: java.lang.IllegalArgumentException: Invalid version for API key METADATA: 5
看上去像是有关api等级或者版本的问题,但是看filebeat官方:
Compatibility
This input works with all Kafka versions in between 0.11 and 2.1.0. Older versions might work as well, but are not supported.
说的是:
兼容性
此输入适用于0.11和2.1.0之间的所有Kafka版本。较旧的版本也可以使用,但不受支持。
解决方案:
虽然官方这么说,但还是试试吧。
把kafka换成2.1.0版本后,问题解决了,看来确实是版本不适配。
题外话:
- 我在查找解决方案时见到filebeat的github仓库有人提一样的issue,然后官方说:
“你确定真的有这个问题吗?如果真的有,请去ES社区提问”
然后就把这个issue给关了,从此没有下文,社区也没人提类似的问题。 - 官方文档有问题啊!
- 大家一般都是用logstash作为kafka和ES之前的连接,但是相对filebeat消耗资源较多,如果用不上很多的分析功能,比如kafka仅仅是用来削峰解耦,那用filebeat读取kafka消息是个不错的选择。
Filebeat与Kafka版本不兼容问题解决

本文档描述了在使用filebeat 7.10和kafka 0.11时遇到的错误,即filebeat无法从kafka消费数据,报错提示可能与API版本有关。尽管filebeat官方声明兼容0.11到2.1.0之间的Kafka版本,但实际问题在于filebeat与0.11版本的kafka存在兼容性问题。通过将kafka升级到2.1.0,问题得到解决,证实了问题确实由版本不匹配引起。该案例提醒我们关注组件间的版本兼容性问题。
5244

被折叠的 条评论
为什么被折叠?



