文档章节

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

m
 moon888
发布于 02/21 18:20
字数 837
阅读 108
收藏 0

3 月,跳不动了?>>>

本篇分别介绍

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

数据可靠性保障

当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:每条消息肯定会被传输一次且仅传输一次。

© 著作权归作者所有

上一篇: GC Java中引用
下一篇: Kafka 数据同步
m
粉丝 10
博文 208
码字总数 107325
作品 0
程序员
私信 提问
加载中

评论(0)

开源软件成熟度评测报告-分布式消息中间件

一、背景 随着互联网技术和金融科技的不断发展,从RPC到Web Service,从SOA的推行再到RESTful以及云计算中PaaS与SaaS的推广,分布式架构在金融企业中得到了广泛应用,消息中间件则在分布式系...

何东杰
2017/12/20
0
0
大数据(kafka-原理及架构)

kafka背景及应用场景 由LinkedIn 公司开发的一个分布式的消息系统; 高吞吐率; 支持Kafka Server间的消息分区,及分布式消费; 同时支持离线数据处理和实时数据处理; 支持在线水平扩展。 ...

这很耳东先生
2019/07/02
60
0
Kafka、RabbitMQ、RocketMQ消息中间件的对比—— 消息发送性能

中间件小哥 浏览 228 2016-04-08 11:21:09 摘要引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦。现在开源的消息中间件有很多,前段时间我们自家的产品 RocketMQ...

tantexian
2016/05/04
688
0
MetaQ 入门(Metamorphosis)

一、 简介 设计很独特,它采用pull机制,而不是一般MQ的push模型;大量利用了zookeeper做服务发现和offset存储;它来源于kafka(scala),但是有自己的特点:事务、多种offset存储、高可用方...

一枚Sir
2015/10/14
564
0
支付宝钱包系统内部架构图,架构设计

支付宝系统架构概况 典型处理默认 资金处理平台 财务会计 支付清算 核算中心 交易 柔性事务 支付宝的开源分布式消息中间件–Metamorphosis(MetaQ) Metamorphosis (MetaQ) 是一个高性能、高可...

洋哥6
2016/02/02
825
0

没有更多内容

加载失败,请刷新页面

加载更多

Flutter 强大的MediaQuery控件

注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 MediaQuery 通常情况下,不会直接将MediaQuery当作一个控件,而是使用MediaQuery.of获取当...

老孟程序员
29分钟前
28
0
【实战】2.如何写周报

如何写周报 一、周报的目的 以一个时间节点为准,同时做到向上汇报和向下汇报。向上汇报要做到整体项目的概况,让上级领导知道当前项目的整体状态。向下汇报要做到我们当前做了什么,紧接着的...

卖小女孩的小火柴
37分钟前
24
0
美颜重磅技术之GPUImage源码分析

说到基于GPU的图像处理和实时滤镜,大家肯定会想到鼎鼎大名的GPUImage,这个项目确实为后续开发提供了很多方便,基本的图像处理工具一应俱全。但是学习借鉴GPUImage的项目结构,可以为我们提...

码农突围
43分钟前
34
0
mapbox

Mapbox是一个可以跨行业使用的开发平台,我们可以利用它对地图进行创建和定制,以解决地图、数据和空间分析等问题。 Leaflet 轻量 WebGIS 前端类库 Leaflet 是一个为建设移动设备友好的互动地...

东东笔记
49分钟前
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部