首页/数据/数据工程与 ETL 速查/Java 消费者代码示例
本包目录(311 条)
管道基础52 条
Kafka64 条
调度与编排40 条数仓建模52 条数据质量50 条CDC 与同步53 条

Java 消费者代码示例

Java 消费者骨架:关闭自动提交、poll 循环处理、按批手动提交;poll 间隔内的处理时长要控制在 max.poll.interval.ms 内。

订阅subscribe 走组协调;assign 手动指定分区
提交处理成功后 commitSync/commitAsync
退出wakeup() 打断阻塞的 poll 后 close()

最小示例

最小示例
Properties props = new Properties();
props.put("bootstrap.servers", "kafka1:9092");
props.put("group.id", "order-consumer");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("enable.auto.commit", "false");

KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("orders"));
while (true) {
    ConsumerRecords<String, String> records = consumer.poll(Duration.ofSeconds(1));
    for (ConsumerRecord<String, String> r : records) {
        process(r);
    }
    consumer.commitSync();
}
poll 循环里做同步外部调用(长 SQL、慢接口)会阻塞心跳之外的处理进度,容易触发再均衡。

易错点

  • commitSync 放在循环外按批提交,崩溃时整批重放,下游需幂等
  • 异常处理吞掉错误继续循环,会造成“看起来在消费、实际一直失败”

数据来源与参考

  • Apache Kafka 官方文档:Consumer API 使用示例
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌