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字段,是否配置生效?(注意前面是否有#号,有就去掉才生效)
1.2 第一次推topic数据的时候报错,重新推就正常了
  • 问题描述:
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遇到这个问题
1.3 由于Kafka auto rebalance ,导致将磁盘IO打满,网络流量速度上限超过磁盘IO
  • 问题描述
    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

1.4 topic的leader全部为none
  • 解决方案
    检查副本数factor是否大于节点数,比如只有单节点却设factor为2。这个时候改为1就好了
2 Kafka-1.1.1 2.1 kafka-connect 启动官方示例:
./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,解决了该报错。
但是又有新的报错:
Kafka-常见问题
文章图片

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,就没有报错了。。。

    推荐阅读