Kafka生产者
1. 生产者模式
Kafka生产者有两种工作模式,即同步模式和异步模式。
异步模式下,生产者客户端应用程序不需要提供回调函数,生产者客户端应用程序发送完一条消息后,不需要关心服务器端处理完了没有,可以接着发送下一条消息。服务端在处理完每一条消息后,会自动触发回调函数,返回响应结果给客户端。
同步模式下,生产者发送完一条消息后,必须等待服务端返回响应结果,然后才能发送下一条消息。
2. 生产者消息的发送
KafkaProducer只用了一个send方法,就可以完成同步和异步两种模式的消息发送。
生产者客户端对象KafkaProducer的send方法的处理逻辑是:首先序列化消息的key和value(消息必须序列化成二进制流的形式才能在网络中传输),然后为每一条消息选择对应的分区(表示要将消息存储到Kafka集群的哪个节点上),最后通知发送线程发送消息。
3. 生产者参数设置
request.requred.acks:
0:producer不等待broker的ack,这一操作提供了一个最低的延迟,broker一接收到还没有写入磁盘就已经返回,当broker故障时有可能丢失数据;
1:producer等待broker的ack,partition的leader落盘成功后返回ack,如果在follower同步成功之前leader故障,那么将会丢失数据;
-1:producer等待broker的ack,partition的leader和follower全部落盘成功后才返回ack,数据一般不会丢失,延迟时间长但是可靠性高;