消息队列-Kafka | 青训营

57 阅读2分钟

消息队列-Kafka

简介

Kafka是一种高吞吐量、可持久化、分布式的消息队列系统。它被设计成具备良好的扩展性和可靠性,广泛应用于大规模分布式系统的数据传输和处理中。

Kafka的核心概念

  1. Topic(主题):消息发布的类别或者说是消息的存放位置。每个消息都属于一个特定的主题。可以创建多个主题来满足不同的需求。
  2. Producer(生产者):负责将消息发送到Kafka集群中的指定主题中。
  3. Consumer(消费者):从Kafka集群中订阅一个或多个主题,并消费其中的消息。
  4. Broker(代理):Kafka集群中的一个节点,负责消息的存储和转发。多个Broker组成一个Kafka集群。
  5. Partition(分区):每个主题可以分为一个或多个分区,每个分区在存储层面上都是有序且不变的消息序列。
  6. Offset(偏移量):每个分区中的消息都有一个唯一的标识,称为偏移量。消费者可以通过指定偏移量来读取分区中的消息。
  7. Replica(副本):为了提高数据的可用性和容错能力,每个分区可以有多个副本进行备份。

Kafka代码示例

下面是一个使用Java语言操作Kafka的示例代码:

  1. 引入Kafka客户端依赖:
dependencies {
    implementation 'org.apache.kafka:kafka-clients:2.8.0'
}
  1. 发送消息到Kafka主题:
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;

public class KafkaProducerExample {
    public static void main(String[] args) {
        String topicName = "my_topic";
        String bootstrapServers = "localhost:9092";
        
        Properties properties = new Properties();
        properties.put("bootstrap.servers", bootstrapServers);
        properties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        
        Producer<String, String> producer = new KafkaProducer<>(properties);
        
        String message = "Hello, Kafka!";
        ProducerRecord<String, String> record = new ProducerRecord<>(topicName, message);
        
        producer.send(record);
        
        producer.close();
    }
}
  1. 从Kafka主题消费消息:
import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;

public class KafkaConsumerExample {
    public static void main(String[] args) {
        String topicName = "my_topic";
        String bootstrapServers = "localhost:9092";
        
        Properties properties = new Properties();
        properties.put("bootstrap.servers", bootstrapServers);
        properties.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        properties.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        
        Consumer<String, String> consumer = new KafkaConsumer<>(properties);
        
        consumer.subscribe(Collections.singletonList(topicName));
        
        while (true) {
            ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
            
            for (ConsumerRecord<String, String> record : records) {
                System.out.println("Received message: " + record.value());
            }
        }
    }
}

以上代码展示了如何使用Java语言操作Kafka,包括发送消息和消费消息两个基本步骤。我们可以根据自己的需求进行扩展和优化。

希望这份学习笔记对大家有帮助!