zoukankan      html  css  js  c++  java
  • kafka理论总结

    server向 producer 应答机制有3种

    一、立即回复,最快,但是最不安全
    二、server 让leader 储存 ,立即发送ack
    三、等所有的leader 及follower 全都同步完了,才回ack

    ISR列表 保持同步的副本

    存储的所有的副本的列表

    isr in-sync replica set leader 维护一张leader的表

    如果follower 在多少时间内未发送数据到leader则 踢出去

    High Watermark


    LEO log end offset
    HW high waterMark


    Exactly Once 语义:
    服务器的ack级别:
    ack -1 保证不会丢失数据 at least once 到少一次
    优点: 保证不丢数据
    缺点: 可能导致重复发送
    ack 0 只发送一次数据 at most once 最多一次 (保证生产者的每条消息,只能发送一次)
    优点: 可以保证数据不重复
    缺点: 不能保证数据不丢失

    如何保证消息,既不复发,也能保证发送呢? Exactly Once
    历史: 在0.11版本以前的Kafka,对此是无能为力的,只能保证数据不丢失
    历史解决办法: 费者对数据做全局去重

    0.11版本的Kafka: 引入 "幂等性"
    "幂等性" --> 不论向Server发送多少次重复数据,Server端都只会持久化一条
    At Least Once + 幂等性 = Exactly Once

    用法:
    要启用幂等性,只需要将Producer的参数中enable.idompotence设置为true即可

    原理: (pid,partition,SeqNumber)
    开启幂等性的Producer在 "初始化" 的时候会被分配一个PID,发往同一Partition的消息会附带Sequence Number。而Broker端会对<PID, Partition, SeqNumber>做缓存,当具有相同主键的消息提交时,Broker只会持久化一条。
    问题:
    但是PID重启就会变化,同时不同的Partition也具有不同主键,所以幂等性无法保证跨分区跨会话的Exactly Once。

    以上问题如何解决? 重重重重重要........
    Kafka从0.11版本开始引入了事务支持
    事务可以保证Kafka在Exactly Once语义的基础上,生产和消费可以跨分区和会话,要么全部成功,要么全部失败。
    为了实现跨分区跨会话的事务,需要引入一个全局唯一的Transaction ID,并将Producer获得的PID和Transaction ID绑定。这样当Producer重启后就可以通过正在进行的Transaction ID获得原来的PID。


    实现:
    为了管理Transaction,Kafka引入了一个新的组件Transaction Coordinator.

    负责两件事情:
    1、写事务的执行状态写入kafka 一个topic里面
    2、向producer提供事务的状态信息,从而来获取pid

  • 相关阅读:
    ASP.NET中使用javascript
    遍历DataList控件
    史上最强劲之android模拟器命令详解
    Android开发环境配置简介
    Android模拟器adb命令介绍
    听一名普通android应用开发人员谈:怎样成为一名Android开发者
    android模拟器安装及优化(集锦)
    Ubuntu 快捷键集锦
    smplayer 中文字幕乱码,进度条及拖放MKV
    如何在Windows下搭建Android开发环境
  • 原文地址:https://www.cnblogs.com/leigepython/p/12418528.html
Copyright © 2011-2022 走看看