Kafka-常见问题
Kafka常见问题
摘要 本文记录了kafka-0.8.2.1、Kafka-1.1.1、Kafka-2.x 版本的常见问题及解决方法。
1 Kafka-0.8.2.1
1.1 Consumer报错
- 问题描述:
WARN [console-consumer-23149_hadoop2-1476872289945-6edaec5e-leader-finder-thread], Failed to add leader for partitions [filelog_v3_json_test_1019,13],....;
will retry (kafka.consumer.ConsumerFetcherManager$LeaderFinderThread)WARN [console-consumer-23149_hadoop2-1476872289945-6edaec5e-leader-finder-thread], Failed to add leader for partitions [filelog_v3_json_test_1019,13],....;
will retry (kafka.consumer.ConsumerFetcherManager$LeaderFinderThread)
java.nio.channels.ClosedChannelException[2016-10-19 18:18:11,801] WARN Fetching topic metadata with correlation id 4 for topics [Set(filelog_v3_json_test_1019)] from broker [id:0,host:es-gangw,port:9092] failed (kafka.client.ClientUtils$)
- 解决方案:
检查server.properties文件 的host.name字段,是否配置生效?(注意前面是否有#号,有就去掉才生效)
- 问题描述:
bin/kafka-console-producer.sh --broker-list 10.1.17.51:9092,10.1.17.52:9092,10.1.17.53:9092 --topic chengc_1104
222
[2016-11-04 10:45:43,274] WARN Error while fetching metadata [{TopicMetadata for topic chengc_1104 ->
No partition metadata for topic chengc_1104 due to kafka.common.LeaderNotAvailableException}] for topic [chengc_1104]: class kafka.common.LeaderNotAvailableException (kafka.producer.BrokerPartitionInfo)
[2016-11-04 10:45:43,291] WARN Error while fetching metadata [{TopicMetadata for topic chengc_1104 ->
No partition metadata for topic chengc_1104 due to kafka.common.LeaderNotAvailableException}] for topic [chengc_1104]: class kafka.common.LeaderNotAvailableException (kafka.producer.BrokerPartitionInfo)
[2016-11-04 10:45:43,293] ERROR Failed to collate messages by topic, partition due to: Failed to fetch topic metadata for topic: chengc_1104 (kafka.producer.async.DefaultEventHandler)
[2016-11-04 10:45:43,402] WARN Error while fetching metadata [{TopicMetadata for topic chengc_1104 ->
No partition metadata for topic chengc_1104 due to kafka.common.LeaderNotAvailableException}] for topic [chengc_1104]: class kafka.common.LeaderNotAvailableException (kafka.producer.BrokerPartitionInfo)
[2016-11-04 10:45:43,407] WARN Error while fetching metadata [{TopicMetadata for topic chengc_1104 ->
No partition metadata for topic chengc_1104 due to kafka.common.LeaderNotAvailableException}] for topic [chengc_1104]: class kafka.common.LeaderNotAvailableException (kafka.producer.BrokerPartitionInfo)
[2016-11-04 10:45:43,407] ERROR Failed to collate messages by topic, partition due to: Failed to fetch topic metadata for topic: chengc_1104 (kafka.producer.async.DefaultEventHandler)
[2016-11-04 10:45:43,521] WARN Error while fetching metadata [{TopicMetadata for topic chengc_1104 ->
No partition metadata for topic chengc_1104 due to kafka.common.LeaderNotAvailableException}] for topic [chengc_1104]: class kafka.common.LeaderNotAvailableException (kafka.producer.BrokerPartitionInfo)
[2016-11-04 10:45:43,527] WARN Error while fetching metadata [{TopicMetadata for topic chengc_1104 ->
No partition metadata for topic chengc_1104 due to kafka.common.LeaderNotAvailableException}] for topic [chengc_1104]: class kafka.common.LeaderNotAvailableException (kafka.producer.BrokerPartitionInfo)
[2016-11-04 10:45:43,527] ERROR Failed to collate messages by topic, partition due to: Failed to fetch topic metadata for topic: chengc_1104 (kafka.producer.async.DefaultEventHandler)
- 解决方案:
需要先手动创建topic再推数据,0.8.2.1遇到这个问题
- 问题描述
Kafka在两种情况会造成副本数确实或partition不均衡,从而导致auto rebalance:
1.Kafka副本同步超时
2.有节点挂点或重启
- 解决方案
这种情况可以考虑关闭rebalance : auto.leader.rebalance.enable
,然后进行命令行手动balance,可以自己选时间,否则有可能导致在十分繁忙的时候进行rebalance造成负载过高.
- 关于手动自行rebalance说明:
每当一个broker关闭或leader机制挂掉的时候,其上的topic的partition副本会转移到其他节点。这意味着,默认情况下当broker重启时仅会作为各partition副本的follower存在,也就是说不会处理客户端读写请求。
为了避免这种情况,Kafka有一个优先副本(preferred replicas
)的概念。比如说,某个partition的副本存在于1,5,9节点,此时1号节点就是可作为leader的优先副本,因为他更早加入了副本列表。
你可以让Kafka群集通过运行以下命令来尝试恢复已恢复副本的领导:
bin/kafka-preferred-replica-election.sh --zookeeper zk_host:port/chroot
- 解决方案
检查副本数factor是否大于节点数,比如只有单节点却设factor为2。这个时候改为1就好了
./bin/connect-standalone.sh config/connect-standalone.properties config/connect-file-source.properties config/connect-file-sink.properties &
报错如下:
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.collect.Sets$SetView.iterator()Lcom/google/common/collect/UnmodifiableIterator;
【Kafka-常见问题】这个问题查了很久,说了半天都没有一个明确的解决方法,现在我说下我的解决方案。
首先这个问题的原因是因为OS里面已经配置的classpath包含了较低版本(18.0)的guava包,里面没有我们期望的$KAFKA_HOME/libs/guava-20.0.jar,所以导致报错。
查看
connect-standalone.sh
发现他调用的是kafka-run-class.sh
,而这里面使用了CLASSPATH
,所以我们直接在最前面添加一行:CLASSPATH="/home/kafka/kafka_2.11-1.1.1/libs/*"
。重新启动
connect-standalone.sh
,已经没问题了。还有个思路就是将我们要用的Kafka的lib路径添加到OS的classpath中,注意要放在前面,优先加载。
2.2 Timeout of 60000ms expired before the position for partition xxx_topic could be determined 这个问题一般是由于Kafka集群的某个Broker节点负载过高,无法及时响应producer发送数据的请求导致。
3 Kafka-2.x 2.1 源码gradle初始化Could not find method scala 我一开始是从github clone的是最新的代码,版本为2.7,然后gradle(版本为最新的6.5)一直报错,说有一个什么Configuration类找不到。
然后将gradle降级为5.6.4,解决了该报错。
但是又有新的报错:
文章图片
Could not find method scala() for arguments [build_2ofsm9wzcvhxxkvqblsz8ogy5$_run_closure5$_closure73$_closure105@729633ff] on object of type org.gradle.api.plugins.scala.ScalaPlugin.
网上也没找到答案,最后我尝试降级kafka版本,具体来说是将分支从2.7且为了2.3,就没有报错了。。。
推荐阅读
- Hive常见问题汇总
- 深入浅出谈一下有关分布式消息技术(Kafka)
- 15.Kafka
- redis|redis 常见问题一
- 优化常见问题
- 合伙人必看-常见问题
- Springboot整合kafka的示例代码
- 如何精准画线
- 搭建大数据三节点(Hadoop、Hbase、Zookeeper、Kafka、Hive)环境(含配置文件参考)
- mpvue常见问题总结,看看你有没有遇到(二)