【菜鸟教程】Kafka消息队列入门中(生产者、消费者、数据一致性)

工作流程

如下图,topicA是一个3分区2副本的topic,2副本表示leader和follower加起来一共为2。注意leader和follower是不在一个broker的,即不在一台服务器,否则服务器故障时会一起挂掉,备份将没有意义。offset是每个分区独立的,而不是全局性的,如图可以看到每个分区中offset都是从0开始的。并且消费者组中的消费者不能消费同一个分区的内容。
在这里插入图片描述
Kafka 中消息是以 topic 进行分类的,生产者生产消息,消费者消费消息,都是面向 topic
的。
topic 是逻辑上的概念,而 partition 是物理上的概念,每个 partition 对应于一个 log 文
件,该 log 文件中存储的就是 producer 生产的数据。Producer 生产的数据会被不断追加到该log 文件末端,且每条数据都有自己的 offset。消费者组中的每个消费者,都会实时记录自己消费到了哪个 offset,以便出错恢复时,从上次的位置继续消费。

在这里插入图片描述
由于生产者生产的消息会不断追加到 log 文件末尾,为防止 log 文件过大导致数据定位
效率低下,Kafka 采取了分片和索引机制,将每个 partition 分为多个 segment。每个 segment对应两个文件——“.index”文件和“.log”文件。

index 和 log 文件以当前 segment 的第一条消息的 offset 命名。下图为 index 文件和 log
文件的结构示意图。“.index”文件存储大量的索引信息,“.log”文件存储大量的数据,索引文件中的元数据指向对应数据文件中 message 的物理偏移地址。
在这里插入图片描述


生产者

分区策略

分区的原因

  • 提高集群的负载均衡能力,每个 Partition 可以通过调整以适应它所在的机器,而一个 topic又可以有多个 Partition 组成,因此整个集群就可以适应任意大小的数据了。
  • 提高并发读写能力,可以以 Partition 为单位进行读写。

分区的原则

  • 指明 partition 的情况下,直接将指明的值直接作为 partiton 值

    例如指定写到分区1,将写入分区1。

  • 没有指明 partition 值但有 key 的情况下,将 key 的 hash 值与 topic 的 partition
    数进行取余得到 partition 值

    例如没有指定分区,但key的hash值为5,分区数为3,将写入分区2

  • 既没有 partition 值又没有 key 值的情况下,第一次调用时随机生成一个整数(后
    面每次调用在这个整数上自增),将这个值与 topic 可用的 partition 总数取余得到 partition 值,也就是常说的 round-robin 算法。

    例如第一次生成数3,可用分区数3,第一次写入分区0,下一次写入分区1。


数据可靠性保证

为保证 producer 发送的数据,能可靠的发送到指定的 topic,topic 的每个 partition 收到
producer 发送的数据后,都需要向 producer 发送 ack(acknowledgement 确认收到),如果producer 收到 ack,就会进行下一轮的发送,否则重新发送数据。

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kafka是一个分布式流处理平台,它提供了高可靠性、高吞吐量的消息队列服务。在Kafka数据一致性是一个重要的问题,特别是对于副本之间的数据一致性Kafka使用了多个副本来保证数据的可靠性和容错性。当生产者将消息发送到Kafka集群时,消息会被写入到多个主题的多个分区。每个分区都有多个副本,其一个被选为领导者(leader),其他副本则作为追随者(follower)。 Kafka使用了分布式复制协议来保证副本之间的数据一致性。领导者负责接收并写入消息,而追随者则通过复制领导者的数据来保持同步。当消息被写入领导者后,它会被异步地复制到追随者。这种异步复制的机制可以提高Kafka的吞吐量和性能。 在正常情况下,领导者和追随者之间的数据是一致的。当追随者发生故障或无法及时复制数据时,Kafka会尝试重新同步追随者和领导者之间的数据。这个过程被称为副本同步。在副本同步期间,如果某个追随者无法及时复制数据,则会被标记为“落后”状态。只有当所有追随者都达到同步状态后,才认为数据一致性得到保证。 总的来说,Kafka通过使用多个副本以及复制协议来保证数据一致性。虽然在某些情况下可能存在数据延迟或不一致的情况,但Kafka提供了可靠性和容错性的保证,可以满足大部分实时数据处理的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值