Kafka生产者
介绍一下生产消息的流程
- 构建消息,将需要发送的内容打包成一个消息结构
- 序列化消息为二进制结构,以在网络中传播
- 进行分区选择,计算需要发送到哪个partition,发送消息到该partition对应的Broker
Kafka的ACK的三种机制
生产者的写入策略:
- acks = 0:生成者在发送消息后不会等待来自服务器的确认,所以生产者是不知道消息是否成功,也就无法去重试。最不可靠但是性能最好
- acks = 1:生产者在发送消息后会等待主节点的确认,但不会等待所有副本的确认。相对可靠,性能比较高
- acks = all或-1:只有在主节点和所有副本都确认后,生产者才会确认。保证了消息的可靠性,但是性能最差
生产过程何时会发生QueueFullException以及如何处理
生产者发送消息的速度过快,导致Kafka生产者这一侧缓冲区满了,就会抛出异常
解决:
- 等待重试:发生QueueFullException异常的时候,可以等待一段时间后再次尝试重新发送消息。在等待的过程中可以调整生产者的发送速度或者增加Kafka消息队列大小等方式来避免发生QueueFullException
- 增加Kafka的缓冲区大小:修改Kafka的配置文件来增大生产者这一侧的缓冲区
- 限流控制:限制生产者发送消息的速度
Kafka生产者何时发送出消息
- 生产者客户端累计的数据大小达到Batch,默认是16KB(框架支持)
- 生产者客户端缓冲区累计的空闲等待时间间隔,默认是0ms,也就是收到数据就发送
生产者发送消息的模式有几种(Java)
Java的SDK支持三种
- 同步发送,性能最差,可靠性最强
- 发送即忘:这种模式不需要等待Kafka服务器的响应,可靠性低,但是性能最好
- 异步发送不阻塞调用线程:允许调用者注册回调函数处理发送结果或异常,适用于对可靠性有要求也保持高性能的场景
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 cloud_fly blog!