本博客只作为自己学习的一个记录。
一.kafka生产者
1.kafka生产者组件
main线程 send线程 producerrecord对象 序列化器 分区器。
Producerrecord对象格式:topic [key] [partition] value
2.生产者发送消息过程
3.kafka生产者应用程序开发步骤
创建生产者
Properties KafkaProducer 三个必须配置:kafka ip,key和value的序列化方式。
发送消息到kafka
发送并忘记
同步发送:feature对象的get方法
异步发送:send()方法里传入一个回调函数
其他的一些配置 能说出几个
顺序保证:retries设为0 max.in.flight.requests.per.connection topic分区数为1
4.序列化器
自定义序列化器
实现serializer接口,重写configure() serialize() close()方法,不建议自定义,kafka自带已够用。
arvo序列化方式
什么是arvo?
答:是一种与编程语言无关的序列化格式,提供一种共享文件的方式。
arvo的一个很重要的特性非常适合kafka?
答:
arvo的原理?
答:它的原理在于描述序列化对象的schema格式:{“namespace”:"***","type":"***","name","类名",["fields":{"name":"字段名","type":"字段类型"}]},这样的结构就算修改数据的schema,不用修改所有负责读取数据的应用程序,不会出现异常或阻断性错误。
schema注册表解决的问题?
答:
arvo序列化和反序列化流程?
答:通过序列化将数据序列化为字节数组,数据中包括schema的ID信息,同时将schema注册到注册表(一个组件),读取反序列化时通过schema id从注册表获取schema.
arvo在kafka中的具体使用?
答:
5.分区
分区策略:默认三种 注:其中一种根据key的散列值,进行取余时是根据所有的分区,而不是所有的可用分区。这就存在一个问题,如果分区不可用,就会发生错误。
自定义分区策略
能想出一种应用场景?
答:
具体实现方法?
答:实现partitioner接口,重写三个方法config() partition() close()
自定义分区器实现好了怎么使用?
答:
6.拦截器