一文彻底搞懂Kafka如何保证消息不丢失

这篇具有很好参考价值的文章主要介绍了一文彻底搞懂Kafka如何保证消息不丢失。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. kafka 架构

kafka如何减少数据丢失,Java开发,java,消息队列,kafka,分布式

Producer:生产者,发送消息的一方。生产者负责创建消息,然后将其发送到 Kafka。

Consumer:消费者,接受消息的一方。消费者连接到 Kafka 上并接收消息,进而进行相应的业务逻辑处理。

Consumer Group:将多个消费者组成一个消费者组,一个消费者组可以包含一个或多个消费者。使用多分区 + 多消费者方式可以极大提高数据下游的处理速度,同一消费组中的消费者不会重复消费消息,同一个消费者组的消费者可以消费同一个topic的不同分区的数据。Kafka 就是通过消费组的方式来实现消息 P2P 模式和广播模式。

Broker:服务代理节点。Broker 是 Kafka 的服务节点,是 kafka 一个实例,每个服务器上有一个或多个 kafka 的实例,简单的理解就是一台 kafka 服务器,kafka cluster表示集群的意思

Topic:消息的主题,可以理解为消息队列,kafka的数据就保存在topic。Kafka 中的消息以 Topic 为单位进行划分,生产者将消息发送到特定的 Topic,而消费者负责订阅 Topic 的消息并进行消费。

Partition:Topic 是一个逻辑的概念,它可以细分为多个分区,每个 topic 可以有多个分区,分区的作用是做负载,提高 kafka 的吞吐量。每个分区只属于单个主题,同一个主题下不同分区包含的消息是不同的,partition 的表现形式就是一个一个的文件夹,分区在存储层面可以看作一个可追加的日志(Log)文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。

Offset:offset 是消息在分区中的唯一标识,Kafka 通过它来保证消息在分区内的顺序性,不过 offset 并不跨越分区,也就是说,Kafka 保证的是分区有序性而不是主题有序性。

Replication:副本,是 Kafka 保证数据高可用的方式,Kafka 同一 Partition 的数据可以在多 Broker 上存在多个副本,通常只有主副本对外提供读写服务,当主副本所在 broker 崩溃或发生网络异常,Kafka 会在 Controller 的管理下会重新选择新的 Leader 副本对外提供读写服务。

Leader:在kafka中默认副本的最大数量是10个,且副本的数量不能大于Broker的数量,follower和leader绝对是在不同的机器,同一机器对同一个分区也只可能存放一个副本。

Message:每一条发送的消息主体。

Record:实际写入 Kafka 中并可以被读取的消息记录。每个 record 包含了 key、value 和 timestamp。

Zookeeper:kafka 集群依赖 zookeeper 来保存集群的的元信息,来保证系统的可用性。

kafka 本质就是一个消息系统,与大多数的消息系统一样,主要的特点:

  • 使用推拉模型将生产者和消费者分离
  • 为消息传递系统中的消息数据提供持久性,以允许多个消费者
  • 提供高可用集群服务,主从模式,同时支持横向水平扩展

与 ActiveMQ、RabbitMQ、RocketMQ 不同的地方在于,它有一个分区Partition的概念。
如果你创建的topic有5个分区,当你一次性向 kafka 中推 1000 条数据时,这 1000 条数据默认会分配到 5 个分区中,其中每个分区存储 200 条数据。
这样做的好处,方便消费者从不同的分区拉取数据,假如你启动 5 个线程同时拉取数据,每个线程拉取一个分区,消费速度会非常非常快!

这是 kafka 与其他的消息系统最大的不同!

在使用消息队列时,数据不丢失是至关重要的。Kafka 作为一款主流的消息队列系统,提供了多方面的机制来保障数据不丢失,针对生产者、消费者和代理节点三个层面,是如何保证数据不丢失的

2. producer端是如何保证数据不丢失的

2.1 同步发送

同步发送模式下,生产者会阻塞等待 broker 的确认,直到消息被成功写入 ISR 中,才算发送成功。这种方式可以保证数据强一致性,但也降低了吞吐量。

2.2 异步发送

异步发送模式下,生产者不会等待 broker 的确认,而是直接将消息发送给 broker。这种方式可以提高吞吐量,但也存在数据丢失的风险,例如当 broker 宕机时,未确认的消息可能会丢失。

2.3 批量发送

批量发送可以减少发送消息的次数,提高吞吐量。Kafka 支持批量发送,生产者可以将多个消息组合成一个批次发送,以减少网络开销和提高效率。

3. consumer端是如何保证数据不丢失的

3.1 手动提交

消费者端默认自动提交模式,但这种模式下,如果消费者在消费消息后还未提交偏移量,就宕机了,那么这部分消息就会被重复消费。为了避免这种情况,可以设置手动提交模式,由消费者程序显式提交偏移量,确保消息只被消费一次。

3.2 幂等性消费

在某些情况下,即使消息只被消费一次,也可能导致数据不一致。为了解决这个问题,可以对消费逻辑进行改造,使其具有幂等性,保证即使消息被重复消费,也不会产生错误结果。

4. broker端是如何保证数据不丢失的

4.1 副本机制

Kafka 每个消息都会保存多个副本,即使一个副本所在的代理节点宕机,其他副本仍然可以提供数据。副本机制可以有效提高数据的可靠性,但也会增加存储空间和资源开销。

4.2 ISR机制

ISR(in-sync replica)列表包含所有与 leader 副本保持同步的副本。只有 ISR 列表中的副本才能接收写请求,保证数据的完整性和一致性。

4.3 刷盘机制

Kafka 将消息写入内存页缓存后,会异步刷盘到磁盘。为了保证数据持久性,可以配置刷盘策略,例如同步刷盘或异步刷盘。同步刷盘会降低吞吐量,但可以保证数据即使在 broker 宕机的情况下也不丢失。异步刷盘可以提高吞吐量,但存在数据丢失的风险,例如当 broker 宕机时,未刷盘到磁盘的数据可能会丢失。文章来源地址https://www.toymoban.com/news/detail-855385.html

到了这里,关于一文彻底搞懂Kafka如何保证消息不丢失的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RocketMQ和Kafka的区别,以及如何保证消息不丢失和重复消费

    性能(单台) 语言 多语言支持客户端 优缺点 RocketMQ 十万级 java java 模型简单、接口易用,在阿里有大规模应用 文档少,支持的语言少 Kafka 百万级 服务端scala,客户端java 主流语言均支持 天生分布式、性能最好,常用于大数据领域 运维难度大,对zookeeper强依赖,多副本机制

    2024年01月16日
    浏览(48)
  • Kafka怎么保证消息发送不丢失

    Kafka发送消息是异步发送的,所以我们不知道消息是否发送成功,所以会可能造成消息丢失。而且Kafka架构是由生产者-服务器端-消费者三种组成部分构成的。要保证消息不丢失,那么主要有三种解决方法: 生产者(producer)保持同步发送消息 服务器端(broker)持久化设置为同

    2024年02月04日
    浏览(54)
  • 使用 Kafka 保证消息不丢失的策略及原理解析

    ✨✨祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心!✨✨  🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 一、引言 二. 持久化存储 2.1持久化存储原理: 2.2使用示例: 1. 安装 Kafka: 2. 生产者代码: 3. 消费者代码: 三. 消息确认机制 3.1消息确认机制原理: 3.2使用示

    2024年04月09日
    浏览(51)
  • 彻底搞懂Docker容器与Kraft模式kafka集群关于消息大小相关参数设置

    部署背景: 在DockerHub拉取的bitnami/kafka:3.4.1 镜像,如果要部署在Docker-Swarm集群或者单Docker部署,对于消息大小设置需要添加参数 KAFKA_CFG_MESSAGE_MAX_BYTES,如果设置为其他不符合规范的参数格式,会导致容器一直启动不了。 PS:KAFKA_CFG_MESSAGE_MAX_BYTES 是针对Broker级别消息大小限制

    2024年02月08日
    浏览(37)
  • kafka如何保证数据不丢失?

    生产者生产数据有两种模式:一种是同步模式,一种是异步模式。 同步模式:生产者生产一条数据,就保存一条数据,保存成功后,再生产下一条数据,能够保证数据不丢失,但是效率太低了。 异步模式(采用ack机制): 在producer端开启一块buff缓冲,用来缓存数据,缓存一批

    2023年04月27日
    浏览(36)
  • kafka如何保证数据不丢失

    1.1 生产者如何保证数据不丢失 ACK机制: 当生产者将数据生产到Broker后, Broker应该给予一个ack确认响应, 在kafka中, 主要提供了三种ack的方案:     ack=0 : 生产者只管发送数据, 不关心不接收Broker给予的响应     ack=1 : 生产者将数据发送到Broker端, 需要等待Broker端对应的Topic上对应

    2024年02月06日
    浏览(40)
  • 一文读懂kafka消息丢失问题和解决方案

    今天分享一下kafka的消息丢失问题,kafka的消息丢失是一个很值得关注的问题,根据消息的重要性,消息丢失的严重性也会进行放大,如何从最大程度上保证消息不丢失,要从生产者,消费者,broker几个端来说。 kafka生产者生产好消息后,会将消息发送到broker节点,broker对数据

    2024年02月08日
    浏览(49)
  • kafka是如何保证数据不丢失的

    Kafka通过一系列机制来确保数据不丢失,这些机制涵盖了生产者、Broker和消费者等关键环节。以下是Kafka保证数据不丢失的主要方式: 生产者生产数据不丢失: 同步方式:生产者发送数据给Kafka后,会等待Kafka的确认。如果在一定时间内(如10秒)没有收到Broker的ack响应,生产

    2024年04月25日
    浏览(40)
  • [kafka]kafka如何保证消息有序

    严格的说,kafka只能保证同一个分区内的消息存储的有序性。 这个问题并没有标准答案,面试官只是想看看你如何思考的。 kafka只能保证单partition有序,如果kafka要保证多个partition有序,不仅broker保存的数据要保持顺序,消费时也要按序消费。假设partition1堵了,为了有序,那

    2024年02月16日
    浏览(36)
  • 【kafka面试题2】如何保证kafka消息的顺序性

    如何保证kafka消息的顺序性呢,其实整体的策略就是:我们 让需要有序的消息发送到同一个分区Partition。 为什么说让有序的消息发送到同一个分区Partition就行呢,,下面我们来详细分析一下子。 首先 ,我们知道kafka消息的收发是基于Topic(主题),消息通过Topic进行分类。单

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包