在Apache Kafka 中确保哪些消息投递语义:

为了高效,Apache Kafka   默认确保 at-least-once 投递语义,同时允许使用者通过Producer 取消重试 同时在批量处理消息前提交Offset来实现at-most-once 语义。

但是Exactly-once  投递语义需要目的存储系统合作来实现。但是Kafka 提供OffSet 可以使使用者简单容易的来实现Exactly-once 的语义。

现在,我们了解了一些关于Producer 和Consumer工作原理,那么让我们一起讨论Kafka提供关于消息在Producer和Consumer之间传递的语义

在Kafka中提供多种消息传递语义:

1、At-Most-Once :消息可能丢失但是绝对不会重传。

2、At-Least-Once: 消息绝对不会丢失,但是可以发生重传现

3、Exactly-Once:这是使用者期望的,每一个消息仅仅被发送一次,有且只有一次。

消息传递语义可以被分为两个问题:  发送消息的持久性确保和消费者消费一个消息的确保。

在许多系统中都声称提供了 Exactly -Once  消息发送语义,但是,注意约束条件是非常重要的。大部分系统声称具有误导性。

包括:1 、消费者或者生产者可能宕机。2、可能存在多个消费者消费消息 3、写入到磁盘的数据可能会丢失。

Kafka 消息传递语义非常简单。 当发布一个消息时,我们有一个消息被 commited 到log的概念。一旦消息被commited到之中后,这个消息就不会丢失。

在Kafka中对于生产者没有强制性的投递语义。 虽然,我们在网络发生错误的情况下,我们不知道上面将会发生,但是,允许一个生产者产生一个“”“业务主键”

并且重试生产请求的幂等是完全可以的。在一个有重复的系统中是非常重要的。因为,在一个服务器失败的情况下,这样依旧可以工作。

在这个特点下,这样有足够满足,生产者可以多次重试,直到生产者得到明确确认消息被发送成功。 这样,我们就可以确保消息被commited 并且消息被exactly -once发送。

让我们来讨论一下Consumer 的消费语义。  所有的复制都明确的拥有相同的Offset 。 消费者本身控制着在log中的位置。

如果一个消费者从不宕机,那么就可以确保在内存中存储position .但是,当一个消费者宕机后,那么另外一个进程需要选择一个合适的位置开始消费。

那么另外一个进程可以有多个选择的位置来消费进程并且更新位置:

1、先读取消息,然后保存position ,最后处理消息。 At-Most-Once .

在这种情况下,如果当保存position 后,在保存输出消息处理进度前,消息者进程宕机了。那么另外一个进程将会从保存的position开始处理.

虽然,可能在保存点之前有几个消息未处理,

在At-Most-Once 语义之下, 失败的消息可能就不会被处理。

2、先读取消息,然后处理消息,最后保存position.

Kafka Message Dilivery Semantics相关推荐

  1. kafka-12-Kafka消息时间戳kafka message timestamp

    参考Kafka消息时间戳(kafka message timestamp) 1 Kafka消息的时间戳 在消息中增加了一个时间戳字段和时间戳类型. 目前支持的时间戳类型有两种:CreateTime和L ...

  2. Kafka—简明教程

    目录 学习目标: 一.Kafka发展历程 1.Kafka一代 - 消息队列 2.Kafka二代 - Partition 3.Kafka三代 - Broker集群 二.Kafka的消息结构? 三.Zoo ...

  3. [Big Data - Kafka] kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余:消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许 ...

  4. Kafka 基本原理(8000 字小结)

    简介 Kafka架构 Kafka存储策略 Kafka删除策略 Kafka broker Kafka Design The Producer The Consumer 复制(Replication) 日 ...

  5. 《kafka中文手册》- 构架设计(一)

    4. DESIGN 设计 4.1 Motivation 目的 4.2 Persistence 存储 Don't fear the filesystem! 不要对文件系统感到恐惧 Constant Ti ...

  6. kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...

  7. Kafka 基本原理

    简介 Apache Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一种快速.可扩展的.设计内在就是分布式的,分区的和可复制的提交 ...

  8. 「中间件系列一」kafka消息中间件

    kafka消息中间件 一:为什么需要消息中间件? 1.解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一 ...

  9. kafka整理笔记笔记

    一.为什么需要消息系统 解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许多消息 ...

最新文章

  1. Vue组件绑定自定义事件
  2. 思路+步骤+方法,三步教你如何快速构建用户画像?
  3. 超市收银程序_超市收银系统案例|千平超市再开2家,星耀助力门店年关创收...
  4. python logger.debug_Python logger模块
  5. django-内网项目上线测试部署步骤
  6. 关注CIO:IT运维如何实现“向管理要效益”(转载)
  7. FL2440移植LINUX-3.4.2 -- 按键驱动和触摸屏驱动移植
  8. SDCC 2016数据库峰会(深圳站)学习笔记
  9. Java基础学习-IO流
  10. 骚年快醒醒,你适合转行做前端吗?
  11. Java进阶1. Synchronized 关键字
  12. .NET Framework第一二课(7/26、27)
  13. excel 度分秒转换经纬度
  14. 微信小程序底部导航栏
  15. C语言如何使用三角函数
  16. 理解Liang-Barsky裁剪算法的算法原理
  17. 微软云+Servlet实现图片上传接口
  18. Mac 下 NVM 的安装与使用
  19. 学会python爬虫,这简直就是二次元宅男的福利
  20. 7-6 输入数据范围的简单判断7-7 计算半圆面积和弧长

热门文章

  1. springboot毕设项目电子竞技赛事管理系统f1v55(java+VUE+Mybatis+Maven+Mysql)
  2. mail,at,batch,sleep小练习
  3. Google Play App Signing 更换签名
  4. Ubuntu的安装、更新、下载软件命令
  5. Kanzi学习之路(6):属性绑定
  6. 《塞尔达传说》与氛围游戏的兴起:在游戏中感受禅意
  7. 电商平台中的9种共性推荐策略
  8. Acme CAD Converter 的线宽要怎么设置啊
  9. Linux下载安装Netcat
  10. 从交互设计“流行元素”中启发