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

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

作者: liuhaonan00 | 来源:发表于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 如何保证消息的传递可靠性

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