博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
kafka消息的可靠性
阅读量:4979 次
发布时间:2019-06-12

本文共 1421 字,大约阅读时间需要 4 分钟。

本文来自网易云社区

作者:田宏增

Kafka的高可靠性的保障来源于其健壮的副本(replication)策略。通过调节其副本相关参数,可以使得Kafka在性能和可靠性之间运转的游刃有余。Kafka从0.8.x版本开始提供partition级别的复制,replication的数量可以在$KAFKA_HOME/config/server.properties中配置。

Kafka中消息是以topic进行分类的,生产者通过topic向Kafka broker发送消息,消费者通过topic读取数据。然而topic在物理层面又能以partition为分组,一个topic可以分成若干个partition。Kafka中的消息以顺序的方式存储在文件中。

Kafka中的topic的partition有N个副本(replicas)。N个replicas中,其中一个replica为leader,其他都为follower, leader处理partition的所有读写请求,follower定期地去复制leader上的数据。

如果leader发生故障或挂掉,一个新leader被选举并被接受客户端的消息成功写入。Kafka确保从同步副本列表中选举一个副本为leader,或者说follower追赶leader数据。

Kafka的ack机制。

当producer向leader发送数据时,可以通过request.required.acks参数来设置数据可靠性的级别:

   1(默认):这意味着producer在ISR中的leader已成功收到的数据并得到确认后发送下一条message。如果leader宕机了,则会丢失数据。

   0:这意味着producer无需等待来自broker的确认而继续发送下一批消息。这种情况下数据传输效率最高,但是数据可靠性确是最低的。

   -1:producer需要等待ISR中的所有follower都确认接收到数据后才算一次发送完成,可靠性最高。但是这样也不能保证数据不丢失,比如当ISR中只有leader时,这样就变成了acks=1的情况。

   Kafka中的消息以一下方式存储到文件中。

2018092809453565ab4bfe-43fa-4aea-876d-489f56d918a0.png   

HW是HighWatermark的缩写,俗称高水位,取一个partition对应的ISR中最小的LEO作为HW,consumer最多只能消费到HW所在的位置。另外每个replica都有HW,leader和follower各自负责更新自己的HW的状态。对于leader新写入的消息,consumer不能立刻消费,leader会等待该消息被所有ISR中的replicas同步后更新HW,此时消息才能被consumer消费。这样就保证了如果leader所在的broker失效,该消息仍然可以从新选举的leader中获取。对于来自内部broKer的读取请求,没有HW的限制。

LEO:LogEndOffset的缩写,表示每个partition的log最后一条Message的位置。

20180928094549c4e3d471-d83e-41a1-9ba3-fff8fd65ea16.png

当leader挂了之后,现在B成为了leader,A重新恢复之后需要进行消息的同步,如果使用追加的方式那么就会有冗余消息,所以A将自己的消息截取到HW的位置在进行同步。

 

网易云,0成本体验20+款云产品! 

更多网易研发、产品、运营经验分享请访问

相关文章:

【推荐】 
【推荐】 

转载于:https://www.cnblogs.com/163yun/p/9717300.html

你可能感兴趣的文章
求3个数公倍数
查看>>
总结sql中in和as的用法
查看>>
2017.8.23 postgresql的外键
查看>>
数据库的多表查询及左右连接
查看>>
codevs 5565 二叉苹果树 树形DP
查看>>
无人机系统开发
查看>>
js --基本语法3 函数,数组,堆棧
查看>>
ngx_pagespeed-nginx前端优化模块介绍
查看>>
linux负载均衡总结性说明(四层负载/七层负载)
查看>>
DP-hdu1176
查看>>
php中的运算符
查看>>
手机在线编程软件Anycodes
查看>>
再来一波
查看>>
[pwnable.kr] - wtf
查看>>
网络基础设施保护和局域网安全
查看>>
css 翻牌 翻转 3d翻转 特效
查看>>
原生Ajax XMLHttpRequest对象
查看>>
第六周作业
查看>>
Linux SVN迁移备份的三种方法
查看>>
SpringBoot 配置rabbitmq
查看>>