首页 > 其他分享 >kafka理论

kafka理论

时间:2022-10-17 20:35:51浏览次数:46  
标签:副本 理论 kafka topic offset leader 分区

kafka理论

消息队列作用、模式
    作用:1.消峰  2.解耦  3.异步通信  
    模式:1.点对点模式(删除对应的消息,只有一个消费者)  
    2.发布订阅模式(不删除数据 消费者相互独立 可以多个消费者)
kafka中概念
    Producer(生产者) 分区(一个topic分为多个分区,) Consumer(消费者)
    leader,follower:生产消费主要针对leader,leader挂了follower上线
kafka为什么快
    1.分布式集群,采用分区  2.稀疏索引,快速定位  
    3.顺序写磁盘(600M)  4.页缓存和零拷贝(零拷贝:数据传输不走应用层)
生产者分区
    分区的好处:1.提高并行度  2.便于合理的存储

    分区的策略:
    1.指明partition时,直接用   
        2.没有指明partition时:key的hash值与topic的partition进行取余
    3.没有partition,没有key:粘性分区(随机选择一个分区,
            一直使用这个分区,直到batch满或者完成)
ZK
    ZK中记录的信息:leader信息,分区
    ZK中的kafka信息:
        1./kafka/brokers/ids  记录哪些服务器
        2./kafka/brokers/topics/first/partitions/0/stats 记录谁是leader,哪些服务器可以用
        3./kafka/controller 辅助选举Leader
Kafka副本概念
Kafka副本:(副本统称为AR=ISR+OSR)
    默认个数1,一般改为2。
    操作对象只是针对leader。
    ISR:表示和Leader保持同步的Follower集合。
    OSR:Follower与Leader副本同步时,延迟过多的副本(超过30S)。
    LEO(Log End Offset):每个副本中最后一个offset,LEO其实就是最新的offset+1
    HW(High Watermark):所有副本中最小的LEO
副本的调整
    分区副本的调整:
        auto.leader.rebalance.enable=true
        //不平衡的比率   一般不开启
        leader.imbalance.per.broker.percentage=10% 
        leader.imbalance.check.interval.seconds=300s  //负载均衡检查时间
    增加副本因子:
        //副本存储计划
        --reassignment-fileincrease-replication-factor.json --execute  
Leader选举流程
    1.在ZK中注册   2.controller谁先注册,谁输了算   
    3.选举出来的controller监听broker变化
    4.ISR中存活为前提,AR中排在前面的优先  5.controller将节点信息上传到ZK
    6.其他controller从ZK同步相关信息    
    7.broker挂了,controller监听到变化 进行新一轮的选举
故障流程
    Follow故障:
        1.被踢出ISR,leader和follower继续接受数据
        2.将log文件中高于HW的部分截取掉,从HW开始向leader进行同步直至HW。
            完成后加入ISR。
    Leader故障:
        1.ISR选出新的Leader  2.其余follower将自己文件中log高于HW部分截取掉,
        然后从新的leader同步数据
        只能保证数据的一致性,并不能保证不丢失或者不重复
文件存储机制
    1topic==N partition==N segment
    .index 偏移量索引文件(稀疏索引4K数据,记录一条数据。offset为相对offset)
    .timeindex 时间戳索引文件(判断文件删除)
    index和log文件以当前segment的第一条消息的offset命名
    上面文件在文件夹下面:文件夹的命名规则为topic+分区
文件清除策略
    log.retention.hours 默认7天    log.retention.check.interval.ms 检查周期5分钟
    delete策略和compact策略
        //最大时间戳作为该文件的最大时间戳
        log.cleanup.policy=delete  
        //对于相同key的不同value,只保留最后一个版本。(适用于用户信息等)
        log.cleanup.policy=compact 
kafka消费方式
    (拉)如果没有数据,可能会陷入循环中,一直返回空数据
    一个消费者消费一个分区+的数据。offset 在系统主题中
    消费者组内消费者大于分区数:会有空闲的消费者
    groupid的hash值 % 50(分区数量)
kafka消费参数
    Fetch.min.bytes=1  //每次最小抓取大小
    Fetch.max.bytes=50m  //一批数据最大值
    Fetch.max.wait.ms=500ms  //一批数据最小值
    Max.poll.records=500   //一次拉取数据返回消息的最大条数
消费者分区
    Range、RoundRobinAssignor、Sticky、CooperativeSticky    
    partition.assignment.strategy=Range+CooperativeSticky
    properties.put(ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG,
        "org.apache.kafka.clients.consumer.RoundRobinAssignor")
    //(多topic:所有多出来的分区都在1分区)
    Range:针对一个topic 分区数/consumer数   前面的消费者多消费   
    RoundRobin:针对多个topic  Range
    Sticky:相邻的分区尽量在一起 
消费者分区再平衡
    触发条件:1.超时45s 2.消费者消费时间过长5min
offset维护位置
    __consumer_offsets  kafka内置topic
    key value存储的:key是group.id+topic+分区号 value就是当前offset值
    一段时间进行压缩:group.id+topic+分区号 保留最新的数据
    自动提交offset:enable.auto.commit=true  auto.commit.interval.ms  提交的时间间隔默认5s
        properties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,"true")
        properties.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG,"1000")
    手动提交offset:
        同步提交:必须等待offset提交完成   异步提交:offset提交后,就开始消费下一批数据
        properties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,"false")
        kafkaConsumer.commitAsync()
        kafkaConsumer.commitSync()
    指定offset:
        auto.offset.reset=earliest|latest|none
            earliest:自动将偏移量重置为最早的偏移量
            latest:最新的偏移量
            none:如果未找到先前偏移量,则消费者抛出异常
其他理论
    数据积压:
        1.增加分区和增加消费者
        2.增加拉取单次条数
    kafka监控:kafka-Eagle监控
        kafka默认内存1G
    kafka-kraft模式:去掉ZK

标签:副本,理论,kafka,topic,offset,leader,分区
From: https://www.cnblogs.com/wuxiaolong4/p/16800524.html

相关文章

  • KafkaConsumer实现多线程消费的一种实现思路——不考虑消息的顺序性问题基础
    背景介绍一种Kafka多线程消费的实现思路以及方案,此方案不考虑消息消费的顺序性问题,假定消息之间没有依赖关系。这个项目是公司里面开发有个SDK的所谓”飞行窗口“特性产......
  • Linux 下搭建 Kafka 环境
    Linux下搭建Kafka环境作者:Grey原文地址:博客园:Linux下搭建Kafka环境CSDN:Linux下搭建Kafka环境环境要求操作系统:CentOS7下载地址安装说明Kafka版本:2.11-......
  • 【完结】12篇文章告诉你深度学习理论应该学到什么水平
    专栏《AI初识境》正式完结了,在这一个专题中,我们给大家从神经网络背景与基础,讲到了深度学习中的激活函数,池化,参数初始化,归一化,优化方法,正则项与泛化能力,讲到了深度学习中的评......
  • kafka 知识点 笔记
    kafka知识点笔记使用kafka消息队列的好处:1)、解耦合不用保证两台客户端同时在线,发送端先发送消息暂时存储,接收端上线后可以自己再获取消息......
  • 深度学习与统计力学(I) :深度学习中的基础理论问题
    这是谷歌和斯坦福最新的一项合作研究综述报告,发表在物理学的顶级期刊“凝聚态物理年鉴”(AnnualReviewofCondensedMatterPhysics)。作者:YasamanBahri,JonathanKadmon,......
  • Kafka重启出错:Corrupt index found
    1、日志记录FATALFatalerrorduringKafkaServerStablestartup.Preparetoshutdown(kafka.server.KafkaServerStartable)java.lang.IllegalArgumentException:requir......
  • 理论力学
    理论力学平面力系平面汇交力系可以简化为一个合力,其合力大小和方向等于各合力的矢量和,合力的作用线通过汇交点。平面汇交力系的平衡的必要和充分条件是:该力系的力多边形......
  • Keeping Multiple Databases in Sync Using Kafka Connect and CDC
    BRIJESHJAGGI SEP20,2022Microservicesarchitectureshavenowbeenwidelyadoptedamongdevelopers,andwithagreatdegreeofsuccess.However,......
  • Kafka暴力关闭导致日志被锁
    ERRORShutdownbrokerbecausealllogdirsind:\work\data\kafka-logshavefailed现象:在windows的命令行里启动kafka之后,当关闭命令行窗口时,就会强制关闭kafka。这种......
  • centos7 安装kafka3.3.1
    1、安装kafka(要先安装jdk)#进入自己要安装的目录wgethttps://downloads.apache.org/kafka/3.3.1/kafka_2.12-3.3.1.tgz2、解压tar-zxvfkafka_2.12-3.3.1.tgz#改......