记录一下工作中遇到的关于 Kafka 的问题,具体工作流程是 Mysql 通过 DataX 同步到 Kafka 中,再通过 DataX 把 Kafka 的数据同步到 Elasticsearch,大概就是下图的一个流程:

执行任务发现可以读取到 Mysql 的数据,自己在控制台用命令行消费自动创建的 Topic 也可以消费到数据,但是 Java API 中 consumer.poll 之后的 records 是空的,没有拿到任何数据,并且 IDEA 给出了一个警告:
Unchecked assignment: ‘org.apache.kafka.clients.consumer.ConsumerRecords’ to ‘org.apache.kafka.clients.consumer.ConsumerRecords<java.lang.String,java.lang.String>’. Reason: ‘consumer’ has raw type, so result of poll is erased
大致意思应该是说 Consumer 是有自己的原始类型,如果没有指定就会把 poll 的结果擦除。经过排查代码发现
KafkaConsumer consumer = new KafkaTool(kafkaBootstrapServers, groupid, topic).getKafkaConsumer();
自己写的 KafkaTool 的返回的 KafkaConsumer 没有 <K,V> 类型,修改以后就可以成功跑通
KafkaConsumer<String,String> consumer = new KafkaTool(kafkaBootstrapServers, groupid, topic).getKafkaConsumer();
但是虽然问题解决了,疑问点有两个:
1.我看源码没有看到 KafkaConsumer 的原始 <K,V> 类型,这里不清楚
2.同事写完代码在他本地可以执行,而在我的本地出现了这个问题,为什么他不会受这个问题困扰,Kafka 的版本是一致的
这两个问题还需要继续钻研,如果有了解的大佬希望能请教一下!
本文记录了在使用DataX将Mysql数据同步至Kafka,并进一步同步至Elasticsearch过程中遇到的问题。主要问题是Java API中Consumer.poll()返回空记录,通过检查代码并指定泛型<String,String>解决。但仍存在对于KafkaConsumer泛型机制的理解及为何同事间出现差异的疑问。

被折叠的 条评论
为什么被折叠?



