kafka connect rebalance时herder大概率异常
来源:互联网 发布:上海mao livehouse知乎 编辑:程序博客网 时间:2024/05/16 09:53
1. 发生场景
版本:confluent 2.0.0
如果因为some reason触发了task的rebalance,herder work可能发生异常,导致connect进程退出
2. 异常栈
[2016-06-28 17:22:59,934] ERROR Uncaught exception in herder work thread, exiting: (org.apache.kafka.connect.runtime.distributed.DistributedHerder:166)java.util.ConcurrentModificationException: KafkaConsumer is not safe for multi-threaded access at org.apache.kafka.clients.consumer.KafkaConsumer.acquire(KafkaConsumer.java:1294) at org.apache.kafka.clients.consumer.KafkaConsumer.close(KafkaConsumer.java:1225) at org.apache.kafka.connect.runtime.WorkerSinkTask.close(WorkerSinkTask.java:128) at org.apache.kafka.connect.runtime.Worker.stopTask(Worker.java:313) at org.apache.kafka.connect.runtime.distributed.DistributedHerder$14.onRevoked(DistributedHerder.java:898) at org.apache.kafka.connect.runtime.distributed.WorkerCoordinator.onJoinPrepare(WorkerCoordinator.java:236) at org.apache.kafka.clients.consumer.internals.AbstractCoordinator.ensureActiveGroup(AbstractCoordinator.java:207) at org.apache.kafka.connect.runtime.distributed.WorkerGroupMember.poll(WorkerGroupMember.java:142) at org.apache.kafka.connect.runtime.distributed.DistributedHerder.tick(DistributedHerder.java:266) at org.apache.kafka.connect.runtime.distributed.DistributedHerder.run(DistributedHerder.java:159) at java.lang.Thread.run(Thread.java:745)[2016-06-28 17:22:59,936] INFO Kafka Connect stopping (org.apache.kafka.connect.runtime.Connect:68)
3. 异常分析
1. 线程模型
confluent存在两种worker:
(1)控制数据读写 的source/sink worker;
(2)负责协调source/sink worker的herder worker;
当rebalance发生时,herder会去主动close worker线程。
2. 关键方法
从栈中可以看出,在KafkaConsumer.acquire方法中抛出的异常,分析下该方法:
(1)本意:阻止多个线程对同一分区数据进行读写操作。
(2)实现手段:非阻塞锁的思路,用变量记录了当前的操作线程。一个线程来操作时,如果发现其他线程也在操作就退出。
这个控制手段很粗暴,它应该做的是“不许多个sink worker同时操作“。而不是一棒子全打死,不许所有线程操作。
3. 问题
herder 主动去杀sink worker,会操作Consumer。如果sink worker正在操作就会发生异常。
4. 解决办法
- herder close sink worker时,不要走acquire流程;
- herder close sink worker时,先等待一定时长(sleep或者加锁)
- 在V3.0.0 版本,框架上做了改动,herder 只是置位close标记,不错其他的操作。
0 0
- kafka connect rebalance时herder大概率异常
- kafka rebalance机制
- Kafka Consumer Rebalance
- Kafka Connect
- kafka connect
- kafka测试时异常
- kafka 0.9.0.0 rebalance后部分分区不再读数据
- Kafka集群生产/消费的负载均衡(Rebalance)测试
- kafka启动时内存异常
- kafka connect 简单测试
- kafka connect简介以及部署
- kafka-connect遇到的问题
- kafka ZookeeperConsumerConnector 异常排查
- Kafka中QueueFullException异常
- kafka消费命令异常
- 大数据Kafka
- Kafka大数据传输配置
- kafka系列(七)使用Kafka-Connect导入导出数据
- java 大数据方向面试题
- C# 对路径不允许访问
- Dubbo的服务治理
- JS闭包学习笔记(1):什么是闭包
- app\build\intermediates\res\merged\debug\values-v23\values-v23.xml 编译出错的问题
- kafka connect rebalance时herder大概率异常
- 磁盘性能指标——IOPS理论
- Linux中的文件描述符与打开文件之间的关系
- Nginx源码分析—HTTP框架执行流程
- RuntimeException与CheckedException差异
- PHP中使用foreach和引用导致程序BUG及解决办法
- SQL CONCAT函数
- NDK编译和使用静态库、动态库
- 用python实现单链表