kafka集群连接不上问题解决过程--转载

出现问题:

1.Too many open files

2.java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread

3.Attempting to send response via channel for which there is no open connection, connection id

把ulimit 调成 1024 后 发起大量消费者/生产者请求后重现现此两个问题。

WRNING:Attempting tosendresponse via channelforwhich there isnoopenconnection, connection id ERROR Errorwhileaccepting connection (kafka.network.Acceptor)java.io.IOException: Too manyopenfiles

可以确定如果有大量的连接被创建,可能会发生此种情况。

谷歌搜索大概解释如下:

1.每次连接会创建一定数据量的句柄(具体未知),大量连接被创建,因连接未释放,将产生大量的占用的文件句柄,超过ulimit 限制后会产生错误:java.io.IOException: Too many open files

2.如果太快重新连接, 响应未完成时重新连接,broker将未完成的响应发送到具有重用端口的新连接。新连接将以相关标识(connection id )不匹配结束,会出现WRNING:Attempting to send response via channel for which there is no open connection

在保证测试程序仍然一直尝试不断连接的前提下:

手动修改

ulimit-SHn 65535

重启 kafka,

broker 出现报错并shutdown.

FATAL Fatal error during KafkaServerStartable startup.Preparetoshutdown(kafka.server.KafkaServerStartable)org.I0Itec.zkclient.exception.ZkTimeoutException: Unabletoconnecttozookeeperserver'localhost:2181'withtimeoutof6000ms

查看 zookeeper 进程存在并且已启动。

将zookeeper 的JVM分配内存修改为1G。

kafka成功启动

但出现如下错误:

Errorinfetch kafka.server.ReplicaFetcherThread$FetchRequest@34ba0f3f (kafka.server.ReplicaFetcherThread)java.io.IOException: Connection to172.16.2.85:9093(id:0rack:null) failed

以及

WRNING:Attempting tosendresponse via channelforwhich there isnoopenconnection

其他程序依然无法连接kafka

lsof -n|awk'{print $2}'|sort|uniq -c|sort-nr |grep19652

查看kafka进程 占用句柄在不断增加, 即 尝试重连的测试程序在不断发起连接请求。

等待几分钟后,日志恢复正常,但依然无法连接.

把其他python 程序 中的socket超时配置

socket_timeout_ms=1000,offsets_channel_socket_timeout_ms=1000

去掉,

使用默认的超时时间。

其他程序 在一次连接失败后,第二次有几秒的缓慢后连接上了kafka ,并正常使用。

由此可以得知,在测试程序继续不断发起大量请求的情况下, 将影响后续程序的连接。

杀掉测试程序后,其他程序即可迅速连上kafka。

修改 测试程序中的socket超时配置,使用默认超时时间。

重新启动 测试程序,4个消费者程序和1和生产者程序(400消费者线程/100生产者线程)。

100 生产者均可迅速启动,前200消费着也是迅速启动,后200启动有几秒的缓慢并有部分连接失败后尝试重新连接,但最终全部都正常启动,生产和消费数据。

kafka日志正常,偶然会出现 两个WARNING:

Attempting tosendresponse via channelforwhich there isnoopenconnection

以及

FailedtosendSSLClosemessage(org.apache.kafka.common.network.SslTransportLayer)

但不影响程序运行。

关闭测试程序和kafka, 重新启动kafka, 从日志看出 kafka进程正在处理 由于 被杀死进程 后尚未处理关闭的 连接。

重新启动测试程序,Attempting to send response via channel for which there is no open connection 的警告不再出现。

偶然仍出出现 Failed to send SSL Close message (org.apache.kafka.common.network.SslTransportLayer) 的警告。

Exception: java.lang.OutOfMemoryError thrownfromthe UncaughtExceptionHandlerinthread"kafka-network-thread-0-ListenerName(PLAINTEXT)-PLAINTEXT-8"

这个告警在测试过程中未能复现, 谷歌搜索 是由于 JVM 分配内存问题, 修改 启动 zookeeper 和kafka-server(broker) 的脚本,zookeeper 分配1G, broker 分配 2G。

重新启动kafka进程。

在杀掉并启动的过程中出现WARNING :

WARN Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect

kafka-server(broker) 启动失败。

出现 ZkTimeoutException 错误,kafka-server(broker)连接 zookeeper 超时,

修改 配置文件 zookeeper.connection.timeout.ms=60000(默认为6000)

即在大量请求连接发送到kafka时,broker 和 zookeeper 之间的连接会变慢。(少量连接的情况下可以正常杀掉并重启)。

在杀掉进程后, 删除/tmp下的临时文件(也可以不删), 则可以在 有大量尝试发送重连请求的时候 重启 kafka.

启动脚本:

ps aux |grep'kafka_2.11-0.10.2.0'|grep-vgrep| awk'{print $2}'| xargskill-9sleep5nohup /usr/local/bluedon/kafka_2.11-0.10.2.0/bin/zookeeper-server-start.sh /usr/local/bluedon/kafka_2.11-0.10.2.0/config/zookeeper.properties >/usr/local/bluedon/kafka_2.11-0.10.2.0/logs/zookeeper_run.log &sleep5nohup /usr/local/bluedon/kafka_2.11-0.10.2.0/bin/kafka-server-start.sh /usr/local/bluedon/kafka_2.11-0.10.2.0/config/server.properties >/usr/local/bluedon/kafka_2.11-0.10.2.0/logs/server_run.log &sleep5nohup /usr/local/bluedon/kafka_2.11-0.10.2.0/bin/kafka-server-start.sh /usr/local/bluedon/kafka_2.11-0.10.2.0/config/server-1.properties >/usr/local/bluedon/kafka_2.11-0.10.2.0/logs/server-1_run.log &sleep5nohup /usr/local/bluedon/kafka_2.11-0.10.2.0/bin/kafka-server-start.sh /usr/local/bluedon/kafka_2.11-0.10.2.0/config/server-2.properties >/usr/local/bluedon/kafka_2.11-0.10.2.0/logs/server-2_run.log &

总结:

这次kafka无法连接是由于程序连接时,指定的socket 超时时间太短(1s),程序在1s内无法连接kafka或者无法生产消费即尝试重新连接, 在连接的过程中可能会再次出现1s内无法连接的情况,因此产生大量的连接/关闭请求, 每次连接会产生一定数量的文件句柄, 系统ulimit值太低(1024),请求不断积压后最终产生 Too many open files错误,由于太多以及太快重新连接, 响应未完成时重新连接,broker将未完成的响应发送到具有重用端口的新连接,最终产生 Attempting to send response via channel警告。

修改:

1.修改 系统 ulimit 值:

ulimit -SHn 65535

修改linux的软硬件限制文件/etc/security/limits.conf. 

在文件尾部添加如下代码: 

soft nofile 102400

hard nofile 102400

4)经过以上修改,在有些系统中,用一般用户再登陆,仍然没有修改过来,那么需要检查是否有如下文件,如果没有,则要添加如下内容:

#vim /etc/pam.d/sshd[Add the line]session    required  /lib/security/pam_limits.so# service sshd restart

2.修改python 程序 中 consumer 的socket 超时时间

client= KafkaClient(hosts=kafka_config['bootstrap_servers'],                        ssl_config=ssl_config,                        socket_timeout_ms=1000, offsets_channel_socket_timeout_ms=1000)修改为 client = KafkaClient(hosts=kafka_config['bootstrap_servers'], ssl_config=ssl_config)即使用默认的3分钟

修改 在程序启动 的时候指定 ulimit 值,不受系统设置限制

ps aux |grep'kafka_2.11-0.10.2.0'|grep-vgrep| awk'{print $2}'| xargskill-9sleep5nohup sh -c"ulimit -SHn 65535 && /usr/local/bluedon/kafka_2.11-0.10.2.0/bin/zookeeper-server-start.sh /usr/local/bluedon/kafka_2.11-0.10.2.0/config/zookeeper.properties">/usr/local/bluedon/kafka_2.11-0.10.2.0/logs/zookeeper_run.log &sleep5nohup sh -c"ulimit -SHn 65535 && /usr/local/bluedon/kafka_2.11-0.10.2.0/bin/kafka-server-start.sh /usr/local/bluedon/kafka_2.11-0.10.2.0/config/server.properties">/usr/local/bluedon/kafka_2.11-0.10.2.0/logs/server_run.log &sleep5nohup sh -c"ulimit -SHn 65535 && /usr/local/bluedon/kafka_2.11-0.10.2.0/bin/kafka-server-start.sh /usr/local/bluedon/kafka_2.11-0.10.2.0/config/server-1.properties">/usr/local/bluedon/kafka_2.11-0.10.2.0/logs/server-1_run.log &sleep5nohup sh -c"ulimit -SHn 65535 && /usr/local/bluedon/kafka_2.11-0.10.2.0/bin/kafka-server-start.sh /usr/local/bluedon/kafka_2.11-0.10.2.0/config/server-2.properties">/usr/local/bluedon/kafka_2.11-0.10.2.0/logs/server-2_run.log &

其他:

ps aux |grepkafka |grep-vgrep| awk'{print $2}

进程所占句柄数

lsof-n|awk'{print$2}'|sort|uniq -c|sort -nr

取出占用端口的进程号

netstat-tnlp | grep2181| awk'{print$7}'| awk -F'/''{print$1}'

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

推荐阅读更多精彩内容