项目场景:
修改linux系统时间,模拟使用flume读取日志文件,并把日志文件信息传输给kafka消费,kafka消费之后,再使用flume读取kafka消费后的日志信息,
问题描述:
flume在读取kafka的消费日志信息后,发现flume报错,测试topic_start,topic_event时发现正常,而flume报错如下:
21/01/22 20:51:54 WARN clients.NetworkClient: Error while fetching metadata with correlation id 19 : {topic_start=LEADER_NOT_AVAILABLE}
21/01/22 20:51:54 WARN clients.NetworkClient: Error while fetching metadata with correlation id 19 : {topic_event=LEADER_NOT_AVAILABLE}
21/01/22 20:51:54 WARN clients.NetworkClient: Error while fetching metadata with correlation id 20 : {topic_start=LEADER_NOT_AVAILABLE}
21/01/22 20:51:54 WARN clients.NetworkClient: Error while fetching metadata with correlation id 20 : {topic_event=LEADER_NOT_AVAILABLE}
21/01/22 20:51:54 WARN clients.NetworkClient: Error while fetching metadata with correlation id 21 : {topic_start=LEADER_NOT_AVAILABLE}
21/01/22 20:51:54 WARN clients.NetworkClient: Error while fetching metadata with correlation id 21 : {topic_event=LEADER_NOT_AVAILABLE}
21/01/22 20:51:54 WARN clients.NetworkClient: Error while fetching metadata with correlation id 22 : {topic_start=LEADER_NOT_AVAILABLE}
21/01/22 20:51:55 WARN clients.NetworkClient: Error while fetching metadata with correlation id 22 : {topic_event=LEADER_NOT_AVAILABLE}
21/01/22 20:51:55 WARN clients.NetworkClient: Error while fetching metadata with correlation id 23 : {topic_start=LEADER_NOT_AVAILABLE}
21/01/22 20:51:55 WARN clients.NetworkClient: Error while fetching metadata with correlation id 23 :
}
原因分析:
这是在flume接受kafka消费的日志信息后,由于flume要进行时间上的验证,再进行信息的接受,在校验时间时flume发现时间相差较大,从而导致flume停止消费kafka日志信息。
解决方案:
1.在kafka的配置文件中配置server.properties,设置
delete.topic.enable=true
如果没有设置 delete.topic.enable=true,则调用kafka 的delete命令无法真正将topic删除,而是显示(marked for deletion)
2.调用命令删除topic:
./bin/kafka-topics --delete --zookeeper 【zookeeper server:port】 --topic 【topic name】
3.找一台部署了zk的服务器,使用命令:
bin/zkCli.sh -server 【zookeeper server:port】
登录到zk shell,然后找到topic所在的目录:ls /brokers/topics,找到要删除的topic,然后执行命令:
rmr /brokers/topics/【topic name】
即可,此时topic被彻底删除。
如果topic 是被标记为 marked for deletion,则通过命令 ls /admin/delete_topics,找到要删除的topic,然后执行命令:
rmr /admin/delete_topics/【topic name】
备注:
网络上很多其它文章还说明,需要删除topic在zk上面的消费节点记录、配置节点记录,比如:
rmr /consumers/【consumer-group】
rmr /config/topics/【topic name】
其实正常情况是不需要进行这两个操作的,如果需要,那都是由于操作不当导致的,正常情况下,安装1到2到3是可以删除topic的。
完成之后,调用命令:
./bin/kafka-topics.sh --list --zookeeper 【zookeeper server:port】
查看现在kafka的topic信息。正常情况下删除的topic就不会再显示。
但是,如果还能够查询到删除的topic,则重启zk和kafka即可。