kafka中的生产者

把书读薄(kafka权威指南 第三章)

kafka发送生产消息的大致流程是什么?

1. 创建生产者对象,生产者发送包装消息的ProducerRecord
2. 生产者通过send方法发送消息
3. 消息被序列化
4. 消息计算出分区
5. 根据分区消息被分配到指定主题和分区的批次中
6. 批量发送到broker
7. broker判断是否消息失败,成功则直接返回元数据【可选】,失败判断是否重试,对应做相应处理

如何创建生产者对象?

必须指定3个属性:broker地址,key的序列化方式,value的序列化方式。其它可选参数,包括重试次数,内存缓冲大小,每次发送消息的批次大小,是否压缩等等

如何发送消息?

1. 同步方式:构建消息的封装ProducerRecord,通过生产者的send方法发送即可,可以用Future的方式接收返回的RecordMetadata
2. 异步方式:同步发消息如果服务器之间通信的时间是10ms,那么1s只能发100个消息,因此不等待的方式(异步)可以节省时间,增加吞吐
3. 发送并忘记:只管发送,不处理任何返回值

发送消息的过程中出了异常怎么办?

kafka异常基本有两类,一是能够重试的方式,比如网络连接段了,一是不会重连,比如消息太大,会直接抛异常,对于异步来讲,可以通过使用回调函数来处理期间出现的异常

Avro序列化简介

它是一种与语言无关的序列化格式。数据通过schema来定义,如果出现读的schema与写的shema不一致的时候,不会抛出遗产,而选择返回默认值。使用的时候,在注册表中注册一个schema,消息字段schema的标识,然后存放到broker中,消费者使用标识符从注册表中拉取schema进行解析得到结果

如何对消息进行分区?

kafka具备默认的分区器。如果key没有,就通过Round robin算法将消息发送到各个可用的分区上,如果key存在,就对键进行散列【只有主题分区数不可变的时候,映射才有用】

猜你喜欢

转载自blog.csdn.net/weixin_39687783/article/details/80114961