0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

kafka支持哪些消息交付语义?

马哥Linux运维 来源:稀土掘金技术社区 2023-12-22 11:27 次阅读

1 背景

在读完kafka官方文档,kafka设计里的消息交付语义一章后,给我的第一印象是内容很抽象,于是草拟和总结了给个副标题,并把相关内容进行了归类;有些生涩的句子,尽量用大白话和举例进行说明,并加入了总结。

消息交付语义的级别有哪些?

消息交付,即消息在生产端,broker端,消费者端的传递保证。

最多一次——消息可能会丢失,但永远不会重新传送。
至少一次——消息永远不会丢失,但可以重新传送。
恰好一次——这就是人们真正想要的,每条消息都传递一次且仅一次。

kafka 支持哪些消息交付语义?

根据英文文档,进行了总结

fd77e27a-9ff2-11ee-8b88-92fbcf53809c.jpg

###################以下为个人观点###################

kafka 真的支持了 最少一次 的交付语义吗?

我的回答是:不同的条件下,可能支持了,也可能没支持。

kafka支持最少一次交付的前提条件

生产端:
kafka生产端在发送消息时,如果遇到底层网络问题,可能会导致消息发送给了broker端,也有可能网络闪断或者丢包,发送的消息可能丢了;但最后的结果是,生产端会根据指定的参数retries,进行一定次数的重试。以此来保证生产端,做到消息至少传递一次。即发送失败了,就重试吧。

所以生产端 支持"最少一次"的前提条件 有如下:

生产端的应用在重试的时候,没有重启,或者宕机

网络,或者broker端,需要在生产端重试次数用完之前恢复

消费者端:
消费者端保证消息至少被消费一次的建议是:在消费者端消费完消息后,在手工提交offset;伪代码如下:


while(true){ 
consumer.poll(); 
XXX 
consumer.commit();
}

具体原因和说明见:juejin.cn/post/729328…

broker端:
broker端,要实现此交付,主要是保证消息不丢。kafka 数据是具备高可靠的,但不代表你的kafka集群就具备了此功能。需要有如下配置:

第一:生产端参数ack 设置为all

第二:在broker端 配置min.insync.replicas参数设置至少为2

第三:在broker端配置replicator.factor参数至少3

第四:在broker端配置 unclean.leader.election.enable 参数建议设置为false

具体原因和说明见:juejin.cn/post/729328…

不支持的情况下,如何去保证消息交付最少一次的保证

消费者端和broker端,可以根据配置和对应代码编写顺序进行解决;但生产端在进行重试时,还需依赖生产端应用的稳定性,底层网络和broker端的可用性;

生产端之所以需要这三个条件的支持,还是生产端没有把待发送消息进行持久化,毕竟待发送的消息是保存在jvm内存中的,jvm重启或者OOM或者宕机了,内存中的消息也就丢了;
如果把待发送的消息进行了持久化,即使应用宕机,网络失败,broker不可用,但在经过应用重启,网络和broker恢复,也可以保证待发送消息不丢失,做到消息的至少一次交付。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    2767

    浏览量

    72779
  • 网络
    +关注

    关注

    14

    文章

    7251

    浏览量

    87449
  • kafka
    +关注

    关注

    0

    文章

    49

    浏览量

    5163

原文标题:kafka的消息交付语义 真的支持了最少一次吗?

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    kafka设计原理的深度探讨

    在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输 支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输 同时支持离线数据
    的头像 发表于 10-08 07:50 1832次阅读
    <b class='flag-5'>kafka</b>设计原理的深度探讨

    Kafka特性和应用场景

    Kafka简介及部署
    发表于 06-17 09:31

    浅析kafka

    kafka常见问题
    发表于 09-29 10:09

    Kafka的全局有序

    Kafka如何做到全局有序
    发表于 10-24 13:51

    基于发布与订阅的消息系统Kafka

    Kafka权威指南》——初识 Kafka
    发表于 03-05 13:46

    Kafka基础入门文档

    kafka系统入门教程(原理、配置、集群搭建、Java应用、Kafka-manager)
    发表于 03-12 07:22

    Kafka集群环境的搭建

    1、环境版本版本:kafka2.11,zookeeper3.4注意:这里zookeeper3.4也是基于集群模式部署。2、解压重命名tar -zxvf
    发表于 01-05 17:55

    一种支持QoS约束的语义Web服务发现框架

    针对当前语义Web服务发现缺乏OoS约束的问题,构建一个支持QoS约束的语义Web服务发现框架。使用QoS认证中心确保QoS信息的动态更新。基于该框架提出一种支持QoS约束的
    发表于 03-31 10:17 10次下载

    阿里云消息队列Kafka商业化:支持消息无缝迁移到云上

    Kafka彻底解决了开源产品稳定性不足的痛点,可用性达99.9%,数据可靠性99.999999%,并且支持消息无缝迁移到云上。7月25日,阿里云宣布正式推出消息队列Kafka,全面融合开源生态
    发表于 07-27 10:49 224次阅读
    阿里云消息队列<b class='flag-5'>Kafka</b>商业化:<b class='flag-5'>支持</b>消息无缝迁移到云上

    如何将物联网数据从设备连接到Kafka集群?

    在与HiveMQ客户的对话中,一些操作集群具有数百万台设备和非常高的消息吞吐量,我们看到需要为Kafka创建MQTT代理扩展。我们的客户希望从MQTT和Kafka协议的本地实现中受益,因为这两个协议都有所有的交付保证。因此,我们
    发表于 07-28 11:53 1349次阅读

    Kafka的概念及Kafka的宕机

    问题要从一次Kafka的宕机开始说起。 笔者所在的是一家金融科技公司,但公司内部并没有采用在金融支付领域更为流行的 RabbitMQ ,而是采用了设计之初就为日志处理而生的 Kafka ,所以我一直
    的头像 发表于 08-27 11:21 1625次阅读
    <b class='flag-5'>Kafka</b>的概念及<b class='flag-5'>Kafka</b>的宕机

    Kafka 的简介

    ,即使对TB级以上数据也能保证常数时间的访问性能 高吞吐率。即使在非常廉价的机器上也能做到单机支持每秒100K条消息的传输 支持Kafka Server间的消息分区,及分布式消费,同时保证每个
    的头像 发表于 07-03 11:10 349次阅读
    <b class='flag-5'>Kafka</b> 的简介

    物通博联5G-kafka工业网关实现kafka协议对接到云平台

    Kafka协议是一种基于TCP层的网络协议,用于在分布式消息传递系统Apache Kafka中发送和接收消息。Kafka协议定义了客户端和服务器之间的通信方式和数据格式,允许客户端发送消息到K
    的头像 发表于 07-11 10:44 302次阅读

    Spring Kafka的各种用法

    Kafka 是不支持消息重试的。但是 Spring Kafka 2.7+ 封装了 Retry Topic 这个功能。 1. @RetryableTopic 使用注解的方式启用 Retry Topic
    的头像 发表于 09-25 17:04 402次阅读

    kafka基本原理详解

    今天浩道跟大家分享一篇关于kafka相关原理的硬核干货,可以说即使你没有接触过kafka,也可以秒懂,一起看看!
    的头像 发表于 01-03 09:57 381次阅读
    <b class='flag-5'>kafka</b>基本原理详解