美文网首页
Kafka 如何保证消息的传递可靠性

Kafka 如何保证消息的传递可靠性

作者: BitInterfc | 来源:发表于2021-01-05 11:23 被阅读0次

一、kafka 简介:

kafka是一个分布式发布-订阅消息系统。其主要架构为:

  • Kafka集群 (Broker):包含一个或多个服务器,服务器节点称为Broker。Broker储存topic数据,每个topic又可以包含多个partition,每个broker会储存该topic的一个partition
  • 生产者 (Producer):将消息写入所选的topic中
  • 消费者 (Consumer):一个consumer group里边多有consumer订阅相同的主题,每个消费者接收一部分分区的消息

二、可靠性保障

基本保障:

  • 保障分区消息的顺序
  • 只有当消息被写入到所有的同步副本时,这条消息才会被认为已提交
  • 消费者只能读取已经提交的消息,无法读取只写入部分副本的消息

Broker可靠性:

  • 复制系数 replication factor:可通过default.replication.factor配置,如果复制系数为N,那么在N-1个broker失效时,仍可以向该topic写入或读取数据
  • 副本的分布:应该在不同的机架上,来满足某个机架不可用时的容灾
  • 不完全的leader选举:通过unclean.leader.election配置。如果分区leader不可用时,一个同步副本会被选为新的leader。如果允许不同步的副本成为leader (默认参数为true),就需要承担丢失数据和数据不一致的风险。如果不允许他们成为leader(参数为false),就要接受可用性降低,等原leader副本恢复到可用状态
  • 最少同步副本: min.insync.replicas 来设置

使用配置生产者

根据可靠性配置合适的acks值

acks参数制定了必须有多少分区副本收到消息,生产者才会确认消息是写入成功的

  • acks = 0: 生产者将消息发送出去,就认为消息已经成功写入
  • acks = 1: 消息发出后,leader分区将它写入内存,就返回确认。此方法可能存在数据丢失,比如leader写入成功,但是没有同步到fellow节点。如果此时leader挂了,或者消息还未刷新至磁盘
  • acks = all:leader返回确认前,要等待所有同步副本都收到消息,才确认返回。

配置重试参数

retries 参数决定了生产者可以重发消息的次数。在充实过程中,消息会有一个主键,保证不会出现数据重复
当生产者写入消息遇到错误时:

  • 可重试错误:比如leader不可用
  • 不可重试错误: 比如配置错误

使用配置消费者

  • group.id
  • auto.offset.reset: 在没有偏移量可提交时,消费者从哪里督导数据,可以设置earlist或latest
  • enable.auto.commit:自动提交偏移量
  • auto.commit.interval.ms

相关文章

  • kafka-怎么保证消息的可靠性与一致性

    在kafka中主要通过ISR机制来保证消息的可靠性。下面通过几个问题来说明kafka如何来保证消息可靠性与一致性 ...

  • Kafka 如何保证消息的传递可靠性

    一、kafka 简介: kafka是一个分布式发布-订阅消息系统。其主要架构为: Kafka集群 (Broker)...

  • kafka的可靠性保证

    这一篇主要来讲讲kafka的可靠性是如何实现的 1.kafka可靠性的基本机制 顺序性保证Kafka可以保证分区消...

  • PHP && RabbitMQ防止消息丢失

    RabbitMQ防止消息丢失,保证消息传递的可靠性,保证每条消息都正常传递,并最终至少消费一次。 背景:订单支付状...

  • 消息队列常见问题

    如何保证消息队列的高可用? 如何保证消息不被重复消费(幂等性问题)? 如何保证消息的可靠性传输(消息丢失问题)? ...

  • MQ随记(2)

    如何保证消息不会被重复消费(保证消息消费时的幂等性) kafka 按照数据进入kafka的顺序,kafka会给每条...

  • Kafka消息传递的可靠性

    kafka拥有以下可靠性保证: 可以保证分区消息的顺序。也就是说,同一个生产者往同一个分区写入消息,假如消息2在消...

  • RocketMQ:至今我见过讲得最全的一篇,看完再也不担心没有实

    RocketMQ 是业内知名的消息中间件,有着金融级消息的消息可靠性保证,在性能方面不输于 Kafka。同时对比 ...

  • 深入理解Kafka(八) 消息可靠性

    下面我们来介绍下Kafka怎么保证消息的可靠性,在消息中间件里,有一个非常重要的问题就是怎么保证消息不丢失,而这就...

  • 如何避免消息队列的重复消费

    消息队列在数据传输的过程中,为了保证消息传递的可靠性,一般会对消息采用ack确认机制,如果消息传递失败,消息队列会...

网友评论

      本文标题:Kafka 如何保证消息的传递可靠性

      本文链接:https://www.haomeiwen.com/subject/gprioktx.html