Kafka中的生产者详解

Kafka中的生产者主要是用来向Kafka中写入消息。其包含的主要内容有如下个方面:

01、应用程序往Kafka中写入消息的场景

记录用户的活动(用于审计好分析)、记录度量指标、保存日志消息、记录智能家电的信息、与其他应用程序进行异步通信、缓冲即将写入到数据库的数据,等等。

02、Kafka发送消息的过程

1、创建ProducerRecord对象

2、使用send()发送ProducerRecord对象

3、序列化器把键和值对象序列化成字节数组,以便在网络上传输。

4、分区器根据ProducerRecord对象的键来选择分区,将记录发送到对应的主题和分区的批次里,之后由独立的线程负责把这些记录批次发送到相应的broker上。

5、服务器接收到这些消息时返回一个响应。如果消息成功写入Kafka,就返回一个RecordMetaData对象,否则返回一个错误。

03、Kafka生产者的必选属性

Kafka生产者有3个必选属性:

1、bootstrap.servers:指定broker的地址清单,地址的格式为host:port。

2、key.serialier:指定一个实现了org.apache.kafka.common.serialization.Serializer接口的类,生产者会使用这个类把键对象序列化成字节数组。

3、value.serializer:与key.serializer类似,指定的类会将值序列化。

04、Kafka生产者发送消息的三种方式

1、发送并忘记(fire-and-forget)

把消息发送给服务器,但并不关心它是否正常到达。大多数情况下,消息会正常到达,因为Kafka是高可用的,而且生产者会自动尝试重发。不过,使用这种方式有时候也会丢失一些消息。

2、同步发送

使用send()方法发送消息,它会返回一个Future对象,调用get()方法进行等待,就可以知道消息是否发送成功。

3、异步发送

使用send()方法,并指定一个回调函数,服务器在返回响应时调用该函数。

Kafka可以保证一个分区里的消息是有序的。也就是说,如果生产者按照一定的顺序发送消息,broker就会按照这个顺序把她们写入分区,消费者也会按照同样的顺序读取它们。

05、使用Avro序列化

Apache Avro是一种与编程语言无关的序列化格式。Avro数据通过与语言无关的schema来定义。schema通过JSON来描述,数据被序列化为JSON文件,不过一般会使用二进制文件。Avro在读文件时需要用到schema,schema一般会被内嵌在数据文件里。

Avro有一个特性:当负责写消息的应用程序使用新的schema,负责读消息的应用程序可以继续处理消息而无需做任何改动。这个特性使得它特别适合用在像Kafka这样的消息系统上。

shema与应用版本一致时,会获取完成的数据,不一致时,获取的数据不完整,但是不会产生异常或阻断性错误。

06、分区

ProducerRecord对象包含了目标主题、键和值。键有两个用途:可以作为消息的附加信息,也可以用来决定消息该被写到主题的哪个分区。拥有相同键的消息将被写到同一个分区。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值