关于Kafka(四) 生产者

发送消息

> 创建ProducerRecord对象,包含主题和内容,分区和键可选

> 序列化器将对象序列化以便网络传输 

> 数据传输到分区器,如果在ProducerRecord中指定了分区,则直接继续发送,若未指定分区,则根据对象的键选择分区

> 相同分区分到同一个消息批次中,并发送给服务器

> 服务器接收到消息后返回响应,如果成功写入则返回RecordMetaData对象,包含主题和分区信息,和记录在分区的偏移量,如果写入失败,则返回错误,生产者可以重试发送

关于Kafka(四) 生产者


发送方式

发送并忘记:发送消息到服务器,不关心是否送达

同步发送:发送消息并等待直到有返回响应

异步发送:发送消息不等待,但是指定回调函数,服务器响应时调用该函数

序列化器

默认序列化器:字符串,整型,字节数组序列化器

自定义序列化器:自定义序列化器调试兼容性比较差,不推荐使用

使用已有的序列化器:

Avro

    > 使用与语言无关的schema定义

    > schema内嵌在数据文件中

    > 读操作和写操作都需要使用schema

    > 更改schema,并不需要更改读取信息的应用,且不会出现异常

Kafka使用Avro

schema注册表:把用到的schema保存在注册表中,引用schema的标识符,读取数据的应用使用标识符从注册表里拉取schema来反序列化记录。

序列化器负责注册schema,反序列化负责拉取schema

关于Kafka(四) 生产者

分区

ProducerRecord对象包含主题,键和值。消息是一个个键值对

    > 可以设置为默认的null

    > 两个作用:消息的附加内容或者指定分区