filebeat使用kafka作为input(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,问题得到解决,证实了问题确实由版本不匹配引起。该案例提醒我们关注组件间的版本兼容性问题。

项目场景:

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消息是个不错的选择。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值