在Java中使用Kafka:库、配置和代码示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在Java中使用Kafka:库、配置和代码示例



Apache Kafka是一个分布式流数据平台,广泛用于构建高负载消息交换系统、日志收集、实时事件处理以及微服务集成。在Java生态系统中,Kafka因其官方库Kafka Clients和众多附加工具而占据特殊地位。在本文中,我们将详细讲解如何在Java中使用Kafka,使用哪些库,并提供实用的代码示例。



在Java中使用Kafka的主要库



为了将Java应用程序与Apache Kafka集成,有几个关键库:



  • Kafka Clients — Apache官方库,提供生产者和消费者的API。这是与代理交互的最基本、最可靠的方式。
  • Spring Kafka — Spring框架的扩展,通过注解和模板(KafkaTemplate, @KafkaListener)简化Kafka的配置和使用。
  • Kafka Streams — 用于在Java中构建流处理应用程序的库,无需Spark或Flink。支持过滤、聚合和流合并。
  • Akka Streams Kafka (Alpakka) — 基于Akka Streams的响应式Kafka库,适用于异步和非阻塞应用程序。


在本指南中,我们将重点介绍官方库Kafka Clients,因为它是所有其他工具的基础。



添加依赖(Maven)



首先,在pom.xml中添加以下依赖:



<dependency>    <groupId>org.apache.kafka</groupId>    <artifactId>kafka-clients</artifactId>    <version>3.7.0</version></dependency>


如果您使用Gradle,请添加:



implementation 'org.apache.kafka:kafka-clients:3.7.0'


配置生产者(Producer)



生产者将消息发送到Kafka主题。我们来看一个创建和发送消息的简单示例。



import org.apache.kafka.clients.producer.*;import java.util.Properties;

public class SimpleProducer { public static void main(String[] args) { // 配置生产者属性 Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("acks", "all"); // 等待所有副本确认 props.put("retries", 3); // 出错时的重试次数

// 创建生产者 Producer<String, String> producer = new KafkaProducer<>(props);

// 发送消息 ProducerRecord<String, String> record = new ProducerRecord<>("my-topic", "key1", "Hello, Kafka from Java!"); producer.send(record, (metadata, exception) -> { if (exception == null) { System.out.println("消息已发送到主题: " + metadata.topic() + ", 分区: " + metadata.partition() + ", 偏移量: " + metadata.offset()); } else { System.err.println("发送错误: " + exception.getMessage()); } });

// 关闭生产者 producer.close(); }}


在此示例中,我们设置了代理地址(localhost:9092)、键和值的序列化器(在此

推荐