深入学习垃圾kafka

背景:

1. kafka是一个分布式、高吞吐率的消息系统

---- 早期版本

---- 重点在日志处理

2. kafka是一个分布式、流式平台

---- 0.10

---- 天然支持stream处理

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

 

 

 

名词解释 

  1. producer
  2. broker(中间人),依赖ZK,存储一些元信息 + 领导选举之类的
  3. consumer
  4. 细分
    1. Record(每一条数据)
      1. key-value
      2. timestmap
    2. Topic(一个消息类别)
      1. 逻辑概念
      2. 发布-订阅基于topic
    3. Partition(分布在不同的broker中)
      1. 物理概念
      2. 一个Topic包含多个partition
      3. 每个partition物理上对应一个文件
    4. Segment
      1. 是文件,一个partition下的多个文件
    5. Consumer group
      1. 就是指定N:M,N个consumer消费M个partition

关键点

  1. consumer使用pull机制而不用push机制(GO语言的NS-queue采用push),原因可以防止producer产生数据太快,但是consumer消费不过来一直积压
    1. broker里面的数据是持久化的,consumer处理慢不会影响数据丢失
    2. pull方式会比push方式慢一点,因为不会一直pull数据,中间有一个时间间隔,或者使用long pulling也行但是还是没push高
  2. producer需要使用SDK发送数据,SDK有内部数据队列,会有丢弃数据风险(可以用立马flush,变成同步模型)
  3. 写数据(append only),顺序写
  4. 什么时候删数据?只需要删除最老的segment即可
  5. 默认SDK发送会有多条TCP链接,这样会导致发送顺序乱掉,解决方法是设置TCP连接数为1
  6. consumer group是如何reblance的?(集中式rebalance)
    1. coordinator决定
  7. ISR复制模式 (In Sync Replace,每次都是一批一批数据过来的)
    1. 发送数据去partition的leader
    2. follower有两个容忍
      1. 接受K条消息落后,超过踢掉(旧版本)
      2. 接受K秒消息落后,超过踢掉
    3. 假如leader挂了,就会在ISR里面宿便选一个
  8. 如何实现exactly once
    1. 两阶段提交
    2. 幂等接口
    3. offset和数据库放在同一个事务

 

posted on 2021-02-25 16:04  stupid_one  阅读(117)  评论(1编辑  收藏  举报

导航