在上文中,配置kafka参数时因为参数类型与kafka预期的类型不匹配而导致其抛出了ConfigException。但很奇怪的是,在日志中看不到这个异常的任何信息,因此也导致我一直没往这方面考虑,最终通过一步步调试才发现对构造函数的调用居然没有返回,并经过进一步的分析搞清楚了是因为参数类型不匹配而抛出了异常,但为什么这个异常信息未打印出来的问题也一直困扰着我。
问题未搞清楚始终是块心病,因此对这块代码的调用关系又进行了跟踪,最终发现是在如下代码中进行初始化的:
ExecutorService e = Executors.newFixedThreadPool(consumerThreadCount);
for (int x = 0; x < consumerThreadCount; x++) {
e.submit(new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
KafkaConsumerConfig kf = new KafkaConsumerConfig(topicName,
topicGroupId, topicServer,saveData, kafkaProperties);
KafkaConsumerConfig.consumerList.put(topicName, kf);
kf.run();
return true;
}
});
}
代码这块为什么使用线程池去处理,可能是业务方面的原因,暂且不去管它。但看到线程池突然想到,是否就是因为任务被提交到了线程池中执行而导致异常没有任何输出呢?
先验证下:
public static void main(String[] args) throws Exception {
ExecutorService executorService = Executors.newFixedThreadPool(2);
executorService.submit