zoukankan      html  css  js  c++  java
  • Kafka

    第四天kafka知识

    Producer基础的案例

    1 Producer的小案例 

      电商系统,会员,凡是能登录的人都是会员。

      你消费了多少钱,那么就给给你累计多少积分。

      比如,你消费了1000块钱,那么同时给你找个会员号1000积分

    1.1 在kafka里面,我们发送消息的时候,可以给消息指定key,也可以不指定

      key跟我们要把找个消息发送到这个主题的哪个分区有关系

    1.1.1 不指定key 

      发送的一条消息,会以轮询的方式 发送到分区里面 (要么轮询,要么随机)

      hadoop   p0

      flink    p1

      hbase   p0

      hadoop      p0

    1.1.2 如果指定key ,test

      test 取这个key的hash值  数字  3

      数字/分区数  

      3/2 

      比如我们分区数2,结果要么是0,要么是1 

      test hadoop -> p1

      这样子的话,我们可以保证这样的一个事,key相同的消息

      一定会被发送到同一个分区

    2 consumer的原理

    2.1 offset 

      在kafka里面,kafka是不帮我们维护这个offset的,这个偏移量需要consumer自己去维护

      consumer这儿,kafka提供了两个参数

      是否开启自动提交偏移量

      每隔多久提交一次消费的offset 

      enable.auto.commit   true

      auto.commit.interval  1000

    2.2 偏移量的数据存到哪呢?

    2.2.1 kafka 0.8版本的时候,消费者偏移量的数据是存储到zookeeper里面

      高并发,zookeeper会出问题

    2.2.2 kafka0.8之后,offset存储到了kafka内部的一个主题里面,__consumer_offset 

      这个kafka内部的主题,默认是50个分区

      默认只有一个副本

      把压力分散到各个broker节点上

    2.3 Coordinator  启动进行了负载均衡

      根据group ID(消费者组),计算出来一个hash值,计算出来以后就是一个数据,然后用这个对  _consumer_offset的分区数(50)

      取模,比如:2,就到集群里面去看 partition为2的这个分区的leader partition在哪一台服务器上面,那么那一台

      服务器就是coordinator服务器 

      1 所有的消费者,都会发送join group 的一个请求;consumer group 向coordinator进行注册

      2 coordinator服务器会从这个消费组的所有消费者选一个leader consumer,同时这个coordinator服务器也会 

      把你要消费topic的消息发送给leader consumer(谁先注册到coordinator,谁就是leader consumer)

      3 leader consumer 制定分区的消费方案,发送sync group 请求,然后把分区消费方案发送给coordinator

      4 coordinator 然后下发消费方案,给每个consumer 

      5 一旦有一个consumer挂掉,会重新走一遍上面流程,重新执行

    2.4 Coordinator 负载均衡策略(了解)

      1 range策略 默认

      2 round-robin策略

      3 sticky策略

      

    24-4 深入浅出kafka4 02:15:00分

    ==============================================================================================================

    3 下一个简单的consumer的基础API

    4 consumer的核心参数

    5 Consumer小案例

    回头再去看第一天的课程里面,有几个地方没讲。(听起来会有点绕)

    1 稀松索引

    2 ISR机制

    3 HW,LEO的更新流程

    如果讲完以后当时如果似懂非懂也没事,下去以后再看一下视频,就明白了。

    补充:

    重试乱序:消息重试是肯能导致消息的乱序的,因为可能排在你后面的消息都发送出去了,你现在收到回调失败了才重试,此时消息

    会乱系,所以使用max.in.flight.requests.per.connection 参数设置为1 ,这样可以保证producer同一时间只能发送一条消息

    这个知识点先不讲,后面讲kafaka的解决方案的时候讲。

  • 相关阅读:
    pytest 框架生成 pytest
    pytest 之数据驱动参数化:pytest.mark.parametrize
    web 网站表单测试、搜索查询测试、删除测试、数据库测试知识点
    pytest 之 fixture 的前置后置功能
    pytest 框架之pytest-html报告生成
    Initialization of bean failed; nested exception is java.lang.
    使用jmeter测试Oracle&&MySQL数据库性能
    jmeter的日常特殊参数化
    压测出现各种奇葩问题,求围观
    weblogic性能调优
  • 原文地址:https://www.cnblogs.com/hanchaoyue/p/13069669.html
Copyright © 2011-2022 走看看