关于Kafka(四) 生产者
发送消息
> 创建ProducerRecord对象,包含主题和内容,分区和键可选
> 序列化器将对象序列化以便网络传输
> 数据传输到分区器,如果在ProducerRecord中指定了分区,则直接继续发送,若未指定分区,则根据对象的键选择分区
> 相同分区分到同一个消息批次中,并发送给服务器
> 服务器接收到消息后返回响应,如果成功写入则返回RecordMetaData对象,包含主题和分区信息,和记录在分区的偏移量,如果写入失败,则返回错误,生产者可以重试发送
发送方式
发送并忘记:发送消息到服务器,不关心是否送达
同步发送:发送消息并等待直到有返回响应
异步发送:发送消息不等待,但是指定回调函数,服务器响应时调用该函数
序列化器
默认序列化器:字符串,整型,字节数组序列化器
自定义序列化器:自定义序列化器调试兼容性比较差,不推荐使用
使用已有的序列化器:
Avro
> 使用与语言无关的schema定义
> schema内嵌在数据文件中
> 读操作和写操作都需要使用schema
> 更改schema,并不需要更改读取信息的应用,且不会出现异常
Kafka使用Avro
schema注册表:把用到的schema保存在注册表中,引用schema的标识符,读取数据的应用使用标识符从注册表里拉取schema来反序列化记录。
序列化器负责注册schema,反序列化负责拉取schema
分区
ProducerRecord对象包含主题,键和值。消息是一个个键值对
键
> 可以设置为默认的null
> 两个作用:消息的附加内容或者指定分区