背景
hadoop集群上运行着flink数据同步任务。数据同步得技术架构是flume采集到kafka,再用flink程序进行消费得流程。近来发现数据不稳定。开始因为一些不同机构之间有些网络升级等问题导致。后来出现问题:数据同步错误;并且kafka单台服务挂掉,zookeeper单台服务挂掉。
排错过程记录
1.kafka集群修改
发现数据不稳定后,首先在yarn上发现flink流任务正在运行,未挂掉。再连接服务器查看java进程
jps
结果发现某一台机器没有kafka任务和zookeeper任务
31872 Application
14114 YarnTaskExecutorRunner
27879 NodeManager
31464 Application
28393 HRegionServer
29068 RunJar
28014 ResourceManager
27505 JournalNode
14833 YarnTaskExecutorRunner
27123 NameNode
30420 Jps
28185 JobHistoryServer
27260 DataNode
28540 HMaster
27741 DFSZKFailoverController
得到这个结果后重新启动这台机器的kafka和zookeeper任务
但是思考集群中为何单点故障数据就不可用。
查看flink使用到的topic信息
./kafka-topics.sh --zookeeper hadoop01-dev:2181/kafka --describe --topic topic_name
发现分区6,副本2 应当可以支持数据服务
查看集群的安装文档后发现:
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
也就是说kafka自带的offset偏移量管理topic的副本数量只有一个。而副本策略的话是一个副本就在分区所在的当前机器上,再加副本存储到其他机器上保存。那么一个副本的话单台机器停止服务后就无法提供服务了,导致同步暂停。
更改副本策略:
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=3
重新启动集群查看副本数量:
./kafka-topics.sh --zookeeper hadoop01-dev:2181/kafka --describe --topic __consumer_offsets
2.zookeeper集群错误
在重启服务后过了两天发现数据还是不稳定。查看任务发现zookeeper单点服务挂掉,发现问题根源应该不是kafka数据副本的问题
查看zookeeper.out文件(一般在哪里执行启动命令就在那里或者在配置文件中)
发现总是在创建连接然后关闭 某天zookeeper.out居然达到32G !!!
任务日志如下:
2021-04-20 18:13:00,010 [myid:2] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@192] - Accepted socket connection from /ip:41724
2021-04-20 18:13:00,010 [myid:2] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@883] - Processing mntr command from /ip:41724
2021-04-20 18:13:00,016 [myid:2] - INFO [Thread-173:NIOServerCnxn@1044] - Closed socket connection for client /ip:41724 (no session established for client)
这当中地址我用了ip替换掉了。大概内容就是上面的情况重复出现只是端口号不一致
到最后就出现拒绝连接
connection refused
发现服务挂掉了。。。
在百度中查找半天也没找到。说可能是zookeeper中进入的脏数据。将快照删除可以了。选取晚上时间我停掉了服务删除了快照。也将快照删除记录下来:
zookeeper的初始化
先将与zookeeper相关服务停掉 再将zookeeper停掉 保证重启后集群的稳定
再将zoo.cfg配置文件中的datadir标识的目录下的版本目录下的快照进行删除
将下面目录下的快照都删除(也适合zookeeper服务无法启动的情况):
3.kafka-eagle错误
在将zookeeper修改后重新启动后在zookeeper中还是会发现创建连接并且关闭循环的情况。
专心查看日志:
2021-04-20 18:13:00,010 [myid:2] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@192] - Accepted socket connection from /ip:41724
2021-04-20 18:13:00,010 [myid:2] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@883] - Processing mntr command from /ip:41724
2021-04-20 18:13:00,016 [myid:2] - INFO [Thread-173:NIOServerCnxn@1044] - Closed socket connection for client /ip:41724 (no session established for client)
2021-04-20 18:13:00,026 [myid:2] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@192] - Accepted socket connection from /ip:41757
2021-04-20 18:13:00,027 [myid:2] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@883] - Processing mntr command from /ip:41757
2021-04-20 18:13:00,032 [myid:2] - INFO [Thread-174:NIOServerCnxn@1044] - Closed socket connection for client /ip:41757 (no session established for client)
发现多个循环上都是同一个IP在访问这一台机器来建立zookeeper的连接 。。。
发现这点后就是查询在ip这台机器查找连接zookeeper的程序了。。。。。。
在某天晚上关闭所有服务,只开启zookeeper服务,再实时查看zookeeper.out
tail -f zookeeper.out
启动kafka发现初始化创建连接后很稳定
当启动kafka-eagle时出现了上面的错误 !!!!!!!!!!
最后服务启动完毕后,锁定kafka-eagle的问题。此组件不影响生产使用,直接测试。查看日志文件显示:
Opening socket connection to server hadoop02-dev/ip:2181. Will not attempt to authenticate using SASL (unknown error)
[2021-04-21 19:34:45] ClientCnxn.main-SendThread(hadoop02-dev:2181) - INFO - Socket connection established to hadoop02-dev/ip:2181, initiating session
[2021-04-21 19:34:45] ClientCnxn.main-SendThread(hadoop02-dev:2181) - INFO - Unable to read additional data from server sessionid 0x278e7d89e200006, likely server has closed socket, closing socket connection and attempting reconnect
发现了 SASL (unknown error)
那么关闭sasl验证:
vim system-config.properties
添加:
再启动发现还是会出现问题。
查找kafka-eagle官网
发现配置参数:
kafka.eagle.metrics.charts=false
意思是监控趋势图表,默认是关闭的。而我这里是开启的。查看eagle这一模块:
发现数据是变动的 !!!!!!!
这证明变动的数据就需要频繁的连接zookeeper集群。就会造成上面那种情况。我这边不需要这样实时监控。直接修改配置参数为默认的参数之后。再查看zookeeper.out 文件的话就只有初始化,之后没有频繁的创建连接了。
没有频繁创建连接的话,zookeeper的访问压力就不会那么大(eagle每分钟会有一批),集群比较稳定
总结
1.zookeeper集群的问题一般配置好后不会是自己的集群问题。大多是外部依赖服务的问题。因为zookeeper集群是用的很多的分布式协调服务框架
2.查找问题循序渐进 积累经验多了才会直切重点,先老老实实的找吧。。。。
3.eagle的话没找到查询的频率。或者说有一个连接池形式的连接应该就不会出现这种情况了