美文网首页
Kafka - 概要

Kafka - 概要

作者: killtl | 来源:发表于2020-07-17 00:04 被阅读0次

为什么kafka不能像mysql一样使用主从模式

  • ka已经在分区层面做了负载均衡,规避了单机瓶颈
  • 消息的实时性更高,避免了主从延迟
  • 存储读取和流消息消费的区别,消费者位移维护麻烦

为什么要分区

  • 提供负载均衡能力
  • 业务级别的消息顺序

消息写入分区策略

  • 自定义
  • round-robin(轮询)
  • randomness(随机)
  • 按消息键分配(可以保证同一个消息键的消息有序的流入同一个分区)
  • ip或者地理位置(分地区推送)

压缩

  • broker也可定制压缩算法,当broker的压缩算法和producer不一致时,将在broker发生再压缩
  • 为了兼容老版本的消息,broker可能会发生再压缩
  • broker都会对消息集合进行解压缩,为了进行各种校验(先做对事情)

如何做到消息不丢失

  • 对committed message做有限度的持久化
  • committed message 是值有N个broker成功接收到消息并写入日志(N >= 1,可配置)

不丢消息对应配置

  • send with callback
  • acks = all
  • retries较大值
  • unclean.leader.election.enable = false (避免非ISR副本成为leader)
  • replication.factor >= 3
  • min.insync.replicas > 1 (isr num)
  • replication.factor > min.insync.replicas
  • enable.auto.commit = false (关闭自动提交offset)

consumer group

  • 共享groupid
  • 一个consumer实例对应一个或多个分区

rebalance

  • consumer或topic或partition变更触发
  • 所有consumer实例停止消费,等待rebalance完成
  • 全consumer参与,全部重新分配所有分区,频繁断开tcp,重连其他broker
  • 实在太慢了

_consumer_offsets

  • key => <group id, topic, partition>,value => offset
  • auto commit (定时推,默认5s)或 manually commit
  • compaction策略 主题过期消息清理 (log cleaner 线程)

coordinator

  • 管理consumer group,管理offset

如何找到coordinator

  • abs(hash(groupId) % offsetsTopicPartitionCount) 寻找offset主题的分区
  • 寻找分区的leader副本所在broker

rebalance的坏处

  • 影响consumer端tps(rebalance期间,consumer需要暂停消费)
  • rebalance太慢了
  • 全员参与,效率低,未考虑局部合理性

如何避免rebalance

(consumer需要定期的想coordinator发送心跳包,来证明自己来活着,避免被剔出group,导致consumer数量减少,引发rebalance)

  • 未能及时发送心跳,导致被剔出,引发rebalance
    session.timeout.ms = 6ms
    heartbeat.interval.ms = 2ms
    保证在6ms的超时时间内,consumer能至少发3轮心跳请求
    (心跳评率设置低点,consumer能更快的知道是否发生rebalance,因为coordinator是通过响应心跳包来通知的)

  • 消费时间过长导致,consumer自动发起离开group请求
    max.poll.interval.ms设置长点

位移那些事

  • 自动提交,提交间隔,(重复消费)
  • 手动提交,同步提交(影响tps),异步提交(无法重试),组合更好
  • 精细化提交,也可通过seek指定初始位移

副本机制

  • 副本不提供任何服务,仅仅提供数据冗余,对抗broker宕机的风险
  • 读写leader副本,实现read-your-writes,实现单调读
  • replica.lag.time.max.ms follow落后leader的最长时间间隔
  • ISR是动态调整的集合,剔出后可能再次加进来

rebalance细节

  • consumer group 5种状态 empty dead preparingRebalance(准备开启重平衡,所有consumer重新加入group) completingRebalance(consumer都已加入,等待分配方案) stable
  • compaction自动清除过期位移的条件是 group为empty
  • 重平衡 还有小段缓冲时间让consumer快速提交offset

controller

  • 在zookeeper协助下管理整个集群
  • 所有broker中,有且仅有一台能成为controller
  • 第一个在zookeeper中成功创建/controller znode的broker为controller
  • 控制器故障转移,zookeeper监听并通知其他broker,重新竞选controller

相关文章

  • Kafka - 概要

    为什么kafka不能像mysql一样使用主从模式 ka已经在分区层面做了负载均衡,规避了单机瓶颈 消息的实时性更高...

  • kafka概要设计

    消息队列的引入,什么时候使用MQ? MQ(Message Queue),一种跨进程的通信机制,用于上下游传递消息。...

  • Kafka原理概要

    [TOC] 集群成员间的关系 我们知道,Kafka 是运行在 ZooKeeper 之上的,因为 ZooKeeper...

  • 3、Kafka/flume概要

    七、Kafka ·kafka是一个分布式消息系统。具有高性能、持久化、多副本备份、横向扩展能力。将消息保存在磁盘中...

  • (8) KafkaListener注解

    概要:使用方式、工作流程(解析、注册、监听、调用) spring-kafka基于@KafkaListener注解 ...

  • 一.kafka0.7概要

    kafka0.7全部是scala语言写的,我用一周的时间把它改成了Java语言,git地址链接:https://g...

  • 一.kafka0.8概要

    改写kafka0.8 Java版本git地址:https://github.com/smipo/mykafka-0...

  • 【Kafka零基础学习】Kafka请求分类

    概要 Kafka 0.10.0.1支持的请求有19种,可以从KafkaApis.handle中查看。如下: 后面部...

  • Kafka概要简述核心要点

    1.基本概念:scala编写、LinkedIn转交给Apache、版本格式kafka_ -、不属...

  • 基于Kafka构建事件溯源模式的微服务

    概要 本文中我们将讨论如何借助Kafka实现分布式消息管理,使用事件溯源(Event Sourcing)模式实现原...

网友评论

      本文标题:Kafka - 概要

      本文链接:https://www.haomeiwen.com/subject/leuvhktx.html