请选择 进入手机版 | 继续访问电脑版

kafka之高可靠、一致性、高吞吐

[复制链接]
余峻 发表于 2021-1-2 17:40:23 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
高可靠
1、ACK机制
如果我们要往 Kafka 对应的主题发送消息,我们需要通过 Producer 完成。前面我们讲过 Kafka 主题对应了多个分区,每个分区下面又对应了多个副本;为了让用户设置数据可靠性, Kafka 在 Producer 内里提供了消息确认机制。也就是说我们可以通过设置来决定消息发送到对应分区的几个副本才算消息发送乐成。可以在界说 Producer 时通过 acks 参数指定。这个参数支持以下三种值:


  • acks = 0:意味着如果生产者可以或许通过网络把消息发送出去,那么就认为消息已乐成写入 Kafka 。在这种情况下照旧有大概发生错误,好比发送的对象无能被序列化大概网卡发生故障,但如果是分区离线或整个集群长时间不可用,那就不会收到任何错误。在 acks=0 模式下的运行速度是非常快的(这就是为什么许多基准测试都是基于这个模式),你可以得到惊人的吞吐量和带宽使用率,不外如果选择了这种模式, 一定会丢失一些消息。
  • acks = 1:意味若 Leader 在收到消息并把它写入到分区数据文件(不一定同步到磁盘上)时会返回确认或错误响应。在这个模式下,如果发生正常的 Leader 选举,生产者会在选举时收到一个 LeaderNotAvailableException 异常,如果生产者能恰当地处置处罚这个错误,它会重试发送悄息,最终消息会安全到达新的 Leader 那边。不外在这个模式下仍然有大概丢失数据,好比消息已经乐成写入 Leader,但在消息被复制到 follower 副本之前 Leader发生瓦解。
  • acks = all(这个和 request.required.acks = -1 寄义一样):意味着 Leader 在返回确认或错误响应之前,会等候所有同步副本都收到悄息。如果和min.insync.replicas 参数联合起来,就可以决定在返回确认前至少有多少个副本可以或许收到悄息,生产者会一直重试直到消息被乐成提交。不外这也是最慢的做法,因为生产者在继续发送其他消息之前需要等候所有副本都收到当前的消息。
  • 别的,producer支持同步发送和异步发送发送消息。如果设置成异步,虽然会极大的提高消息发送的性能,但是这样会增加丢失数据的风险。如果需要确保消息的可靠性,必须将 producer.type 设置为 sync,发送消息的速度会低沉。
  • 2、分区副本
  • Kafka 可以包管单个分区里的事件是有序的,整个队列(topic)无序。在众多的分区副本内里有一个副本是 Leader,别的的副本是 follower,所有的读写使用都是颠末 Leader 举行的,同时 follower 会定期地去 leader 上的复制数据,举行同步使用。当 Leader 挂了的时候,ISR聚会合的一个 follower 会重新成为新的 Leader。通太过区副本,引入了数据冗余,同时也提供了 Kafka 的数据可靠性。
    Kafka 的分区多副本架构是 Kafka 可靠性包管的核心,把消息同步到多个副本可以使 Kafka 在发生瓦解时仍能包管消息的长期性。
一致性
ISR同步副本聚集
Kafka中,一个topic的某个partition的leader如果失效,可以在该partition的ISR中动态选举出一个新的leader
ISR概念: ISR(in-sync replicas)聚集(同步副本)。每个分区的 leader 会维护一个 ISR 聚集,ISR 聚集内里就是 follower 副本的 Borker 编号,leader副本也在ISR中,只有跟得上 Leader 的 follower 副本才华参加到 ISR 内里,跟的上并不是完全同步才算跟的上,这个是通过 replica.lag.time.max.ms 参数设置的,也就是说ISR中副本的LEO最多落伍leader副本LEO这个参数值,只有 ISR 里的成员才有被选为 leader 的大概。跟不上 Leader 的 follower 副本进入OSR(out-sync replicas)。
高吞吐
1、顺序读写:kafka的消息是不绝追加到文件中的,这个特性使kafka可以充实使用磁盘的顺序读写性能
2. 零拷贝:跳过“用户缓冲区”的拷贝,创建一个磁盘空间和内存的直接映射,数据不再复制到“用户态缓冲区”
3. 文件分段:kafka的队列topic被分为了多个区partition,每个partition又分为多个段segment,所以一个队列中的消息实际上是生存在N多个片断文件中
4. 批量发送:Kafka允许举行批量发送消息,先将消息缓存在内存中,然后一次请求批量发送出去
5. 数据压缩:Kafka还支持对消息聚集举行压缩,Producer可以通过GZIP、Snappy、LZ4格式对消息聚集举行压缩,一般LZ4的压缩速度快,压缩率低。

来源:https://blog.csdn.net/mainlife23/article/details/112002038
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

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

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )