1、connection with xxxxx disconnected
ERROR o.a.kafka.common.network.Selector - Connection with gdga-hd-kafka-003/68.29.196.30 disconnected
原理是:connections.max.idle.ms参数指定了consumer超过空闲时间就会断开连接,默认是600秒,但是一旦有数据上来还是可以继续消费。
参考资料:
https://stackoverflow.com/questions/33432027/kafka-error-in-i-o-java-io-eofexception-null
2、必须在消费者机器中配置broker的IP映射
kafka consumer机器必须在hosts中配置broker机器名和ip映射否则拿不了数据,也不报错,就是阻塞在那里
原因是:连接broker后,返回来的是机器名称,没法映射为ip
3、KafkaConsumer is not safe for multi-threaded access
单个kafkaConsumer对象不能给多线程并发访问。
这个问题经常在spark中遇到spark-19185,因为spark多分支并发处理数据时,是需要多次调用consumer那数据,
解决办法是去掉consumer缓存
conf.set("spark.streaming.kafka.consumer.cache.enabled", "false");
注意:producer就可以
4、kafka offset out of range异常
kafka会定期5分钟扫描并删除过期(默认7天)的数据,所以sparkstreaming处理延迟、挂了很久才启动、或者有window操作,很有可能会导致此异常,可以通过自己管理offset来解决。
5、consumer和cooridanate心跳失败,reblance
每个consumer都有一个客户端协处理器consumerCooridanate,其默认3S会和Broker中的GroupCooridanate组协调器心跳,如果没有心跳则协调器认为其失效,再过session= 10S中还没有心跳,就会进行reblace。
一般什么情况会导致心跳失败呢?
consumer线程所在进程/程序cpu资源不够,比如线上遇到过topic 120个partition,两个2core的executor处理,
每个executor就需要负担60个consumer线程,而且还要处理业务数据,cpu资源远远不够,导致没法正常保持心跳。
6、topic分区数量设置经验
多少个broker多少个分区。 如果broker少,但是数据量大,也可以整倍增加partition,这不是为了提高处理速度,而是为了spark-streaming这种直连方式时能够得到更高的并发量。
增加分区数(只能加不能减) kafka-topics --zookeeper zk01:2181/kafka --alter --topic utopic --partitions 15
有可能增加了分区后,kafka就不能找到分区leader了,看日志有报异常:
原因是:kafka会在log.dirs配置项的路径下维护这两个和offset相关的值
1. replication-offset-checkpoint
2. recovery-point-offset-checkpoint
解决办法:删除所有log文件夹下的这两个文件即可 参考链接:https://community.hortonworks.com/content/supportkb/150284/error-malformed-line-in-offset-checkpoint-file-occ.html
7、when sending a message with key="null" topic xxx not present in metadate after 60000ms
客户端producer 和 集群版本对不上导致的。
8、consumeroffsets分区leader找不到导致没法获取GroupCoordinator
分析:consumerOffsets默认的副本数是1,一旦有broker挂了,对应分区就会没法选举leader就会报这个错误
解决:在集群刚搭建就设置:offsets.topic.replication.factor=3即可
注意:consumer_offsets这个topic不是启动就创建,而是第一次consumer消费时才会创建
util.AlterKafkaConsumerOffset$: 元信息topic:t_swt,partition:1,0
Could not fetch offset for [t_table,23] due to
org.apache.kafka.common.errors.NotCoordinatorForGroupException:
This is not the correct coordinator for this group.