Kafka数据可靠性、消息发送传输

编程

  • 数据可靠性保障
  • 消息发送模式
  • 消息传输保障

数据可靠性保障

当Producer向Leader发送数据时,可以通过request.required.acks参数来设置数据可靠性的级别,各个级别及其含义如下表所示。

参数值

描述

1

默认级别。Producer在Leader成功收到数据并得到确认后发送下一条消息。如果Leader死机了,则会丢失数据

0

Producer无须等待来自Broker的确认而继续发送下一批消息。这种情况下数据传输效率最高,但是数据可靠性却是最低的

-1

Producer需要等待ISR中的所有Follower都确认接收到数据后才算一次发送完成,可靠性最高

消息发送模式

Kafka的发送模式由Producer端的配置参数producer.type来设置,这个参数指定了在后台线程中消息的发送方式是同步的还是异步的,默认是同步的方式,即producer.type=sync。如果设置成异步的模式,即producer.type=async,这种模式下producer以batch的形式push(推送)数据,这样会极大地提高Broker的性能,同时也会增加丢失数据的风险。如果需要确保消息的可靠性,必须设置producer.type=sync。

以batch方式推送数据可以极大地提高处理效率,Kafka Producer可以将消息在内存中累计到一定数量后作为一个batch发送请求。batch的数量大小可以通过producer的参数(batch.num.messages)控制。通过增加batch的大小,可以减少网络请求和磁盘IO(写入和读出)的次数,但是随之而来的是数据丢失风险的增加。具体参数设置需要在效率和时效性方面做一个权衡。

关于Kafka数据可靠性级别可参考下表所示。

参数

描述

queue.buffering.max.ms

默认值为5000。启用异步模式时,Producer缓存消息的时间。既默认每5秒发送一次缓存数据,这样可以极大提高Broker的吞吐量,同时也会造成时效性问题。

queue.buffering.max.message

默认值为10000。启用异步模式时,Producer缓存队列的最大消息数,如果超过这个值,Producer会阻塞或者丢弃消息。

queue.enqueue.timeout.ms

默认值为-1。达到上面参数时Producer阻塞的时间。如果设置为0,Producer缓存达到最大值后丢弃消息。如果设置为-1,Producer不会丢弃消息,而是阻塞。

bathc.num.message

默认值为200。启用异步模式时,一个batch缓存的消息数量。达到这个值Producer将会发送消息。

消息传输保障

Kafka有以下3种可能的传输保障。

• at most once:消息可能会丢,但绝不会重复传输。

• at least once:消息绝不会丢,但可能会重复传输。

• exactly once:每条消息肯定会被传输一次且仅传输一次。

以上是 Kafka数据可靠性、消息发送传输 的全部内容, 来源链接: utcz.com/z/513687.html

回到顶部