Kafka中Producer和Consumer的作用详解

 更新时间:2023年12月05日 09:45:59   作者:杨荧  
这篇文章主要介绍了Kafka中Producer和Consumer的作用详解,Kafka是一个分布式的流处理平台,它的核心是消息系统,Producer是Kafka中用来将消息发送到Broker的组件之一,它将消息发布到主题,并且负责按照指定的分区策略将消息分配到对应的分区中,需要的朋友可以参考下

一、Producer

Kafka是一个分布式的流处理平台,它的核心是消息系统。Producer是Kafka中用来将消息发送到Broker的组件之一。它将消息发布到主题(topic),并且负责按照指定的分区策略将消息分配到对应的分区中。

下面是使用Java语言编写的Kafka Producer示例代码:

import org.apache.kafka.clients.producer.*;
import java.util.Properties;
public class MyKafkaProducer {
    public static void main(String[] args) {
        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092"); // Kafka集群地址
        props.put("acks", "all"); // 所有副本都响应了才认为发送成功
        props.put("retries", 0); // 发送失败时重试次数
        props.put("batch.size", 16384); // 缓冲区大小
        props.put("linger.ms", 1); // 延迟1ms发送以便等待更多的消息
        props.put("buffer.memory", 33554432); // 缓存总量
        // key和value序列化方式,这里使用默认的StringSerializer
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        Producer<String, String> producer = new KafkaProducer<>(props);
        for (int i = 0; i < 10; i++) {
            producer.send(new ProducerRecord<>("test_topic", Integer.toString(i), "hello world" + i));
        }
        producer.close();
    }
}

上述代码中,我们先设置了Kafka集群地址、消息确认方式等参数。

然后使用这些参数创建一个KafkaProducer实例,并通过send方法发送消息到指定的主题。

在这个例子中,我们将10条带有字符串"hello world"的消息发送到名为"test_topic"的主题中。最后别忘了关闭producer连接。

二、Consumer

Kafka是一个分布式流媒体平台,其中Consumer是Kafka中消费数据的组件之一。

Kafka Consumer可以订阅一个或多个Topic,并从这些Topic中消费消息。

Kafka Consumer可以以不同的方式处理消息,例如将其写入到数据库、打印出来或进行其他自定义处理。

Kafka Consumer使用一组API来与Kafka Broker通信,并接收Broker返回的数据。

在接收到数据后,Consumer会将其提交给应用程序,由应用程序进一步处理。

以下是一个使用Java编写的Kafka Consumer样例代码:

import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.common.serialization.StringDeserializer;
import java.time.Duration;
import java.util.Collections;
import java.util.Properties;
public class KafkaConsumerExample {
    public static void main(String[] args) {
        Properties props = new Properties();
        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
        props.put(ConsumerConfig.GROUP_ID_CONFIG, "test-group");
        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
        Consumer<String, String> consumer = new KafkaConsumer<>(props);
        consumer.subscribe(Collections.singletonList("test-topic"));
        while (true) {
            ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
            for (ConsumerRecord<String, String> record : records) {
                System.out.printf("Received message: key=%s value=%s%n", record.key(), record.value());
            }
        }
    }
}

在这个样例代码中,我们首先创建了一个Properties对象,其中包含连接Kafka Broker所需的配置信息。

然后,我们创建了一个Kafka Consumer实例,并订阅了名为“test-topic”的Topic。

最后,在while循环中,我们使用poll()方法从Broker获取消息,并在控制台上打印出每条消息的键和值。

三、Producer和Consumer有什么作用?

Kafka是一个分布式的消息队列系统,Producer和Consumer都是Kafka中的核心组件之一。

Producer负责向Kafka集群发送消息,将消息发布到一个或多个主题(topic)中。Producer可以选择在消息发送成功后等待确认(ack)或不等待,在等待确认时会阻塞,直到收到Broker返回的确认信息。

而Consumer则是从Kafka集群消费消息,并且订阅一个或多个主题。每个Consumer在消费消息时都有自己独立的offset(偏移量),用来标识该Consumer已经消费到哪个位置。消费者可以随时停止消费或重新开始消费,而不影响其他Consumer的消费进度。

总体来说,Producer和Consumer的作用是实现了消息的生产和消费,帮助用户构建高可靠、高性能的消息处理系统。

到此这篇关于Kafka中Producer和Consumer的作用详解的文章就介绍到这了,更多相关Producer和Consumer的作用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入理解java的异常情况

    深入理解java的异常情况

    在本篇文章里小编给大家分享了关于Java的异常类型的相关知识点内容,有需要的朋友们跟着学习下,希望能够给你带来帮助
    2021-09-09
  • SpringBoot连接Redis集群教程

    SpringBoot连接Redis集群教程

    这篇文章主要介绍了SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • SpringBoot SSE服务端主动推送事件的实现

    SpringBoot SSE服务端主动推送事件的实现

    本文主要介绍了SpringBoot SSE服务端主动推送事件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • java实现页面多查询条件必选的统一处理思路

    java实现页面多查询条件必选的统一处理思路

    这篇文章主要为大家介绍了java实现页面多查询条件必选的统一处理思路详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • SpringBoot中时间类型 序列化、反序列化、格式处理示例代码

    SpringBoot中时间类型 序列化、反序列化、格式处理示例代码

    这篇文章主要介绍了SpringBoot中时间类型 序列化、反序列化、格式处理示例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • idea 配置checkstyle详细步骤

    idea 配置checkstyle详细步骤

    checkstyle是提高代码质量,检查代码规范的很好用的一款工具,本文简单介绍一下集成的步骤,并提供一份完整的checkstyle的代码规范格式文件,以及常见的格式问题的解决方法,需要的朋友可以参考下
    2023-11-11
  • SpringBoot常用注解详细整理

    SpringBoot常用注解详细整理

    大家好,本篇文章主要讲的是SpringBoot常用注解详细整理,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 一文详解Redisson分布式锁底层实现原理

    一文详解Redisson分布式锁底层实现原理

    这篇文章主要详细介绍了Redisson分布式锁底层实现原理,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • java synchronized实现可见性过程解析

    java synchronized实现可见性过程解析

    这篇文章主要介绍了java synchronized实现可见性过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 详解Java信号量Semaphore的原理及使用

    详解Java信号量Semaphore的原理及使用

    Semaphore来自于JDK1.5的JUC包,直译过来就是信号量,被作为一种多线程并发控制工具来使用。本文将详解其原理与使用方法,感兴趣的可以学习一下
    2022-05-05

最新评论