Kafka生产者-概念速览|配置参数|序列化|分区——《Kafka权威指南》笔记

本文详细介绍了Kafka生产者的工作原理,包括消息发送流程、生产者配置参数详解、顺序保证机制、序列化器使用及自定义方法、分区策略等关键知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Kafka生产者——向Kafka写入数据

除了内置的客户端外,Kafka还提供了二进制连接协议,也就是说,我们直接向Kafka网络端口发送适当的字节序列,就可以从Kafka读取消息或往Kafka写入消息。因此还有好多语言实现的Kafka客户端,比如C++,Python,Go,不仅限于Java。

生产者概览

一个应用程序在很多情况下需要向Kafka写入消息:记录用户活动、保存日志信息、记录只能家电信息、与其他应用程序进行异步通信缓冲即将写入数据库的数据,等等。

消息发送过程

尽管生产者API使用起来很简单,但消息的发送过程还是挺复杂的。

在这里插入图片描述

1)我们首先创建一个 ProducerRecord 对象开始,ProducerRecord 对象需要包含目标主题和要发送的内容,还可以指定键和分区。

2)在发送 PR 时,生产者需要先把键值对象序列化成字节数组,这样才能在网络上传输。

3)接下来,数据被传给分区器。如果 PR 中已经指定了分区,那么分区器就不会再做任何事情了,直接把指定的分区返回。如果没有,分区器则会根据 PR 中的键来选择一个分区

4)紧接着,这条记录就会添加到一个记录批次里,这个批次的所有消息都会被发送到相同的主题和分区里

5)之后,有一个独立的线程将这些记录批次发送给相应的broker上。

6)服务器在收到这些消息时会返回一个响应,如果消息发送成功写入Kafka中,就会返回一个 RecordMetaData 对象,它包含着主题和分区信息,以及记录在分区里的偏移量。

创建 Kafka 生产者

想要写入Kafka,首先要创建一个生产者对象,并设置一些属性。Kafka生产者有3个必选属性。

bootstrap.servers

​ 该属性指定 broker 的地址清单,地址格式为:host:port。建议提供两个broker信息,其中一个宕机,生产者仍然能够连接到集群上。

key.serializer

​ broker希望接收到的消息的键值都是字节数组,不过生产者需要将键值所包装的Java对象转成字节数组。Kafka客户端默认提供 ByteArraySerializer、StringSerializer 和 IntegerSerializer 的序列化器。

value.serializer

如果键是整数类型而值是字符串,那么需要使用不同的序列化器。

Properties kafkaProps = new Properties();
        
        kafkaProps.put("bootstrap.servers","hadoop102:9092,hadoop103:9092");
        kafkaProps.put("key.serializer","org.apache.kafka.common.serialization.StringSerializer");
        kafkaProps.put("value.serializer","org.apache.kafka.common.serialization.StringSerializer");

        KafkaProducer<String,String> producer = new KafkaProducer<String, String>(kafkaProps);

此时实例化生产者后,接下来就可以发送开始发送消息了。

发送消息有以下3种方式。

  • 发送并忘记(fire-and-forget)
    • 我们把消息发送给服务器,但并不关心它是否到达。
  • 同步发送
    • 我们使用send()方法发送消息,它会返回一个 Future 对象,调用 get() 方法进行等待,就可以知道消息是否发送成功了。
  • 异步发送
    • 我们调用 send() 发送,并指定一个回调函数,服务器在返回响应时会调用该函数。
		//发送并忘记
        producer.send(record);

        //同步发送
        try {
   
            RecordMetadata metadata = producer.send(record).get();
            Long offset = metadata
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值