关于在 Java 调用 Kafka 的 ConsumerAPI 之后无法消费的问题 [‘consumer‘ has raw type, so result of poll is erased ]

本文记录了在使用DataX将Mysql数据同步至Kafka,并进一步同步至Elasticsearch过程中遇到的问题。主要问题是Java API中Consumer.poll()返回空记录,通过检查代码并指定泛型<String,String>解决。但仍存在对于KafkaConsumer泛型机制的理解及为何同事间出现差异的疑问。

记录一下工作中遇到的关于 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 的版本是一致的
这两个问题还需要继续钻研,如果有了解的大佬希望能请教一下!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值