排查logstash2.4升级到5.0版本后kafka不兼容问题

排查logstash2.4升级到5.0版本后kafka不兼容问题

参考文档:

/usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-input-kafka-5.0.5/CHANGELOG.md

/usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-input-kafka-5.0.5/DEVELOPER.md

/usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-input-kafka-5.0.5/README.md.md

/usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-input-kafka-5.0.5/lib/logstash/inputs/kafka.rb

/usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-output-kafka-5.0.4/lib/logstash/outputs/kafka.rb

缘由:

之前对ELKB环境从2.4版本升级到最新的5.0稳定版本,主要升级步骤可以参考http://jerrymin.blog.51cto.com/3002256/1870205,后来发现kafka集群运行报错,现在把排查过程记录如下,仅供参考

之前环境:

logstash2.4

logstash-input-kafka-2.0.9

logstash-output-kafka-2.0.5

kafka_2.10-0.8.2.2.tgz

升级后环境:

logstash5.0

logstash-input-kafka-2.0.9

logstash-output-kafka-2.0.5

报错信息:

[2016-11-16T14:35:44,739][ERROR][logstash.inputs.kafka    ] Unknown setting'zk_connect'forkafka

[2016-11-16T14:35:44,741][ERROR][logstash.inputs.kafka    ] Unknown setting'topic_id'forkafka

[2016-11-16T14:35:44,741][ERROR][logstash.inputs.kafka    ] Unknown setting'reset_beginning'forkafka

实施步骤:

1,根据错误查看程序哪里报错

grep"Unknown setting"/usr/share/logstash/-R

/usr/share/logstash/logstash-core/lib/logstash/config/mixin.rb:          self.logger.error("Unknown setting '#{name}' for #{@plugin_name}")

2,查看程序相关代码,发现需要查看plugins的config定义文件等

def validate_check_invalid_parameter_names(params)

invalid_params = params.keys

# Filter out parameters that match regexp keys.

# These are defined in plugins like this:

#   config /foo.*/ => ...

@config.each_keydo|config_key|

ifconfig_key.is_a?(Regexp)

invalid_params.reject! { |k| k =~ config_key }

elsif config_key.is_a?(String)

invalid_params.reject! { |k| k == config_key }

end

end

ifinvalid_params.size > 0

invalid_params.eachdo|name|

self.logger.error("Unknown setting '#{name}' for #{@plugin_name}")

end

returnfalse

end# if invalid_params.size > 0

returntrue

end# def validate_check_invalid_parameter_names

3,进入插件总目录查看具体信息

cd  /usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-input-kafka-5.0.5

发现重点查看如下文件

grepconfig ./* -R |awk'{print $1}'|uniq

./CHANGELOG.md:

./DEVELOPER.md:See

./lib/logstash/inputs/kafka.rb:#

./lib/logstash/inputs/kafka.rb:

./README.md:-

Binary

1)首先看CHANGELOG.md,就有发现logstash-input-3.0.0.beta1开始就不在向后兼容,且剔除了jruby-kafka,注意这里有个坑2)会讲到,4.0.0版本说开始支持kafka 0.9,5.0.0又说开始

支持0.10切不向后兼容,这破坏性更新也是够了。看来问题找到了我的kafka版本是kafka_2.10-0.8.2.2.tgz,kafka版本不兼容导致的。

CHANGELOG.md部分文档如下:

## 5.0.4

- Update to Kafka version 0.10.0.1forbug fixes

## 5.0.0

- SupportforKafka 0.10whichis not backward compatible with 0.9 broker.

## 4.0.0

- Republish all the gems under jruby.

- Update the plugin to the version 2.0 of the plugin api, this change is requiredforLogstash 5.0 compatibility. See https://github.com/elastic/logstash/issues/5141

- SupportforKafka 0.9forLS 5.x

## 3.0.0.beta1

- Refactor to use new Java based consumer, bypassing jruby-kafka

- Breaking: Change configuration to match Kafka's configuration. This version is not backward compatible

2)之前我看DEVELOPER.md文档时,看配置语法都正确,还以为是却少依赖关系jruby-kafka library呢,这个再logstash2.x是在用的(另外对比logstash5.x发现5版本少了不少插件。另外

kafka版本写的是0.8.1.1,看来这个DEVELOPER.md没有及时更新(与后面kafka.rb文件不一致),谁要是看到了麻烦及时更新啊,虽是小问题但是也可能误导我等屁民。当然也有可能是我没

有全面看文档导致的。

DEVELOPER.md文档结尾如下:

Dependencies

====================

* Apache Kafka version 0.8.1.1

* jruby-kafka library

3)开始看README.md文档,特意看了下kafka的兼容性 看来logstas-input-kafka5.0.5和logstash-output-kafka5.0.4只能用kafka0.10了。如果你想用Kafka0.9还想用Logstash5.0,你的

logstash-input-kafka和logstash-output-kafka只能降级版本到4.0.0了,这里都说他是中间过渡版本了,所以还是随大流吧。

## Kafka Compatibility

Here's a table that describes the compatibility matrixforKafka Broker support. Please remember that it is good advice to upgrade brokers before consumers/producers

since brokers target backwards compatibility. The 0.9 broker will work with both the 0.8 consumer and 0.9 consumer APIs but not the other way around.

| Kafka Broker Version | Logstash Version | Input Plugin | Output Plugin | Why? |

|:---------------:|:------------------:|:--------------:|:---------------:|:------|

| 0.8           | 2.0 - 2.x   | < 3.0.0 | <3.0.0 | Legacy, 0.8 is still popular |

| 0.9           | 2.0 - 2.3.x   |   3.0.0 | 3.0.0  | Intermediate release before 0.10 that works with old Ruby Event API `[]`  |

| 0.9          | 2.4, 5.0           |   4.0.0 | 4.0.0  | Intermediate release before 0.10 with new get/setAPI |

| 0.10         | 2.4, 5.0           |   5.0.0 | 5.0.0  | Track latest Kafka release. Not compatible with 0.9 broker |

4)现在看来只能升级kafka版本了。最后我看了下jar-dependencies发现了kafka-clients-0.10.0.1.jar

ls/usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-input-kafka-5.0.5/vendor/jar-dependencies/runtime-jars/

kafka-clients-0.10.0.1.jar  log4j-1.2.17.jar  lz4-1.3.0.jar  slf4j-api-1.7.21.jar  slf4j-log4j12-1.7.21.jar  snappy-java-1.1.2.6.jar

5)还有一个文件没有看,怀着好奇心我看了一眼,发现之前都白费力气了,这里才是最有参考价值的的主参考文档啊,是捷径啊,隐藏的够深的,差点错过了,汗!

/usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-input-kafka-5.0.5/lib/logstash/inputs/kafka.rb

kafka.rb部分文档如下:

# This input will read events from a Kafka topic. It uses the the newly designed

# 0.10 version of consumer API provided by Kafka to read messages from the broker.

#

# Here's a compatibility matrix that shows the Kafka client versions that are compatible with each combination

# of Logstash and the Kafka input plugin:

#

# [options="header"]

# |==========================================================

# |Kafka Client Version |Logstash Version |Plugin Version |Security Features |Why?

# |0.8       |2.0.0 - 2.x.x   |<3.0.0 | |Legacy, 0.8 is still popular

# |0.9       |2.0.0 - 2.3.x   | 3.x.x |Basic Auth, SSL |Works with the old Ruby Event API (`event['product']['price'] = 10`)

# |0.9       |2.4.0 - 5.0.x   | 4.x.x |Basic Auth, SSL |Works with the new getter/setter APIs (`event.set('[product][price]', 10)`)

# |0.10      |2.4.0 - 5.0.x   | 5.x.x |Basic Auth, SSL |Not compatible with the 0.9 broker

# |==========================================================

#

# NOTE: We recommended that you use matching Kafka client and broker versions. During upgrades, you should

# upgrade brokers before clients because brokers target backwards compatibility. For example, the 0.9 broker

# is compatible with both the 0.8 consumer and 0.9 consumer APIs, but not the other way around.

6)升级kafka_2.10-0.8.2.2.tgz为kafka_2.11-0.10.0.1.tgz (我看kafka-clients-0.10.0.1.jar,所以没有用最新的kafka_2.11-0.10.1.0.tgz)

大概步骤

关闭老kafka

/usr/local/kafka/bin/kafka-server-stop.sh /usr/local/kafka/config/server.properties

备份老配置文件

server.properties和zookeeper.properties

删除kafka

rm -rf /usr/local/kafka/

rm -rf /data/kafkalogs/*

安装配置新kafka

wget http://mirrors.hust.edu.cn/apache/kafka/0.10.0.1/kafka_2.11-0.10.0.1.tgz

tar zxvf kafka_2.11-0.10.0.1.tgz -C /usr/local/

ln -s /usr/local/kafka_2.11-0.10.0.1 /usr/local/kafka

diff了下server.properties和zookeeper.properties变动不大可以直接使用

启动新kafka

/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties &

7)注意几个关键配置需要修改

config :bootstrap_servers, :validate => :string, :default => "localhost:9092"

config :group_id, :validate => :string, :default => "logstash"

config :topics, :validate => :array, :default => ["logstash"]

config :consumer_threads, :validate => :number, :default => 1

除了上面的几个关键配置外,kafka的topic分片信息需要重新create一份,否则KafkaMonitor监控不出Active Topic Consumer图形,但实际是在工作中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容