通过kafka学习数据一致性

打印 上一主题 下一主题

主题 548|帖子 548|积分 1644

kafka哪些环节存在数据不一致

数据复制

数据从主节点(leader)复制到从节点(follower)的过程中,由于网络耽误、节点故障或其他缘故原由
大概导致从节点未能及时获取或处置惩罚主节点的数据变更,从而产生数据不一致
消息提交

消息提交涉及多个阶段,包括生产者发送消息、消息被写入日志、消息被复制到从节点等。
如果在这个过程中发生错误或异常,大概导致消息丢失或重复,进而引发数据不一致。
消费者处置惩罚

消费者在处置惩罚消息时,如果由于某些缘故原由(如网络中断、消费者进程崩溃等)未能乐成处置惩罚消息
而消息又被重新投递给其他消费者处置惩罚,也大概导致数据不一致。
分区重新分配

在Kafka中,如果分区的leader节点发生故障,Kafka会触发分区重新分配,将leader切换到其他节点
在这个过程中,如果切换不及时或切换过程中发生错误,大概导致数据不一致。
kafka如何保证数据一致性

一条消息从生产到消费完成,可以分别三个阶段:
• 生产阶段:从消息在 Producer 创建出来,经过网络传输发送到 Broker 端。
• 存储阶段:消息在 Broker 端存储,如果是集群,消息会在这个阶段被复制到其他的副本上
• 消费阶段:Consumer 从 Broker 上拉取消息,经过网络传输发送到Consumer上
消息传递语义

起首当 Producer 向 Broker 发送数据后,会举行 commit,如果 commit 乐成,由于 Replica 副本机制的存在,则意味着消息不会丢失,但是 Producer 发送数据给 Broker 后,遇到网络题目而造成通信中断,那么 Producer 就无法准确判断该消息是否已经被提交(commit),这就大概造成 at least once 语义。
在 Kafka 0.11.0.0 之前, 如果 Producer 没有收到消息 commit 的响应效果,它只能重新发送消息,确保消息已经被正确的传输到 Broker,重新发送的时间会将消息再次写入日志中;而在 0.11.0.0 版本之后, Producer 支持幂等传递选项,保证重新发送不会导致消息在日志出现重复。为了实现这个, Broker 为 Producer 分配了一个ID,并通过每条消息的序列号举行去重。也支持了类似事务语义来保证将消息发送到多个 Topic 分区中,保证全部消息要么都写入乐成,要么都失败,这个紧张用在 Topic 之间的 exactly once 语义。
启用幂等传递的方法设置:enable.idempotence = true
启用事务支持的方法设置:设置属性 transcational.id = “指定值”
从 Consumer 角度来分析, Offset 是由 Consumer 本身来维护的, 如果 Consumer 收到消息后更新 Offset, 这时 Consumer 异常 crash 掉, 那么新的 Consumer 接受后再次重启消费,就会造成 at most once 语义(消息会丢,但不重复)。
如果 Consumer 消费消息完成后, 再更新 Offset,如果这时 Consumer crash 掉,那么新的 Consumer 接受后重新用这个 Offset 拉取消息, 这时就会造成 at least once 语义(消息不丢,但被多次重复处置惩罚)。
默认 Kafka 提供「at least once」语义的消息传递,允许用户通过在处置惩罚消息之前保存 Offset的方式提供 「at most once」 语义。如果本身实现消费幂等,理想情况下这个体系的消息传递就是「exactly once」, 也就是保证不丢失、且只会被准确的处置惩罚一次,但是如许是很难做到的。
kafka如何保证消息不丢失?
生产阶段

Kafka生产者异步发送消息并返回一个Future代表发送效果
起首必要获取返回效果判断是否发送乐成。
消息队列通过最常用的哀求确认机制,来保证消息的可靠传递:今世码调用发消息方法时,消息队列的客户端会把消息发送到 Broker,Broker 收到消息后,会给客户端返回一个确认响应,表明消息已经收到了。客户端收到响应后,完成了一次正常消息的发送。
Producer(生产者)保证消息不丢失的方法:
1. 发送确认机制:
Producer可以使用Kafka的acks参数来设置发送确认机制。
通过设置合适的acks参数值,Producer可以在消息发送后等待Broker简直认。
确认机制提供了差别级别的可靠性保证,包括:
• acks=0:Producer在发送消息后不会等待Broker简直认,这大概导致消息丢失风险。
• acks=1:Producer在发送消息后等待Broker简直认,确保至少将消息写入到Leader副本中。
• acks=all或acks=-1:Producer在发送消息后等待Broker简直认,确保将消息写入到全部ISR(In-Sync Replicas)副本中。这提供了最高的可靠性保证。
2. 消息重试机制:
Producer可以实现消息的重试机制来应对发送失败或异常情况。
如果发送失败,Producer可以重新发送消息,直到乐成或达到最大重试次数。
重试机制可以保证消息不会由于临时的网络题目或Broker故障而丢失。
Broker存储阶段

正常情况下,只要 Broker 在正常运行,就不会出现丢失消息的题目
但是如果 Broker 出现了故障,比如进程死掉了或者服务器宕机了,照旧大概会丢失消息的。
在kafka高性能操持原理中相识到kafka为了进步性能用到了 Page Cache 技术
在读写磁盘日志文件时,其实操纵的都是内存,然后由操纵体系决定什么时间将 Page Cache 里的数据真正刷入磁盘
如果内存中数据还未刷入磁盘服务宕机了,这个时间照旧会丢消息的。
为了最大程度地降低数据丢失的大概性,可以考虑以下方法:
长期化设置优化:可以通过调整 Kafka 的长期化设置参数来控制数据刷盘的频率,从而减少数据丢失的大概性。例如,可以降低 flush.messages 和 flush.ms 参数的值,以更频仍地刷写数据到磁盘。
副本因子增加:在 Kafka 中,可以为每个分区设置多个副本,以进步数据的可靠性。当某个 broker 发生故障时,其他副本仍然可用,可以避免数据丢失。
使用acks=all:在生产者设置中,设置 acks=all 可以确保消息在全部ISR(In-Sync Replicas)中都得到确认后才被视为发送乐成。如许可以确保消息被复制到多个副本中,降低数据丢失的风险。
备份数据:定期备份 Kafka 的数据,以便在发生劫难性故障时可以举行数据恢复。
消费阶段

消费阶段采用和生产阶段类似简直认机制来保证消息的可靠传递,客户端从 Broker 拉取消息后,执行用户的消费业务逻辑,乐成后,才会给 Broker 发送消费确认响应。如果 Broker 没有收到消费确认响应,下次拉消息的时间还会返回同一条消息,确保消息不会在网络传输过程中丢失,也不会由于客户端在执行消费逻辑中出错导致丢失。
自动提交位移:Consumer可以选择启用自动提交位移的功能。当Consumer乐成处置惩罚一批消息后,它会自动提交当前位移,标记为已消费。如许纵然Consumer发生故障,它可以使用已提交的位移来恢复并继续消费之前未处置惩罚的消息。
手动提交位移:Consumer还可以选择手动提交位移的方式。在消费一批消息后,Consumer可以显式地提交位移,以确保处置惩罚的消息被正确记录。如许可以避免重复消费和位移丢失的题目。
数据一致体系操持特点

保证数据一致性,必要通过乐成后commit的操纵,消费过程中记录消费标记。乐成与失败的情况都打上标志
Kafka作为一个分布式发布-订阅消息体系,其数据一致性的体系操持特点紧张包括以下几个方面:
分区与副本机制

Kafka将数据分成多个分区(Partition),每个分区在集群中有多个副本(Replica)。
这些副本分布在差别的Broker上,以实现数据的冗余备份和高可用性。
当某个Broker发生故障时,其他Broker上的副本可以接受服务,保证数据的持续可用。
ISR(In-Sync Replicas)机制:
ISR是Kafka中用于维护数据一致性的紧张机制。它包含全部与Leader保持同步的副本。
当ISR中的副本数量不敷时,Kafka会暂停写入操纵,以防止数据不一致。
只有当ISR中的副本数量恢复到一定数量时,才会恢复写入操纵。
消息提交确认

生产者发送消息到Kafka时,必要等待消息被写入ISR中的副本并得到确认,以确保消息被乐成存储
消费者在处置惩罚消息时也必要定期提交偏移量(Offset),以便在发生故障时能够从正确的位置继续消费。
原子性操纵

Kafka保证消息在分区内的顺序性和原子性。
在同一分区内的消息会按照发送的顺序被消费,且不会被其他消息插入打断。
这有助于保证数据的一致性和正确性。
容错处置惩罚

当Kafka集群中的节点发生故障时,Kafka会自动举行故障转移和恢复操纵。
这包括从ISR中选择新的Leader、重新同步数据等,以确保数据的持续可用和一致性。
总结

Kafka通过分区与副本机制、ISR机制、消息提交确认、原子性操纵和容错处置惩罚等手段,确保数据一致性。
这些操持使得Kafka能够在分布式情况中实现高吞吐量、长期化存储、可扩展性和高可靠性等特性
从而满意各种复杂场景下的数据一致性需求。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

羊蹓狼

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表