当前位置: 首页 > news >正文

kafka基本原理概述——patition与replication分配

 

 

kafka一直在大数据中承受着数据的压力也扮演着对数据维护转换的角色,下面重点介绍kafka大致组成及其partition副本的分配原则:

 

文章参考: http://www.linkedkeeper.com/detail/blog.action?bid=1016

 

Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

 

Kafka主要设计目标如下:

  • 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。

  • 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条(也就是100000条——十万)消息的传输。

  • 支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。

  • 同时支持离线数据处理和实时数据处理。

 

Kafka专用术语:

  • Broker:消息中间件处理结点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。

  • Topic:一类消息,Kafka集群能够同时负责多个topic的分发。

  • Partition:topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。

  • Segment:partition物理上由多个segment组成。

  • offset:每个partition都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partition中。partition中的每个消息都有一个连续的序列号叫做offset,用于partition唯一标识一条消息

 

topic & partition

  在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。

  这里也就是broker——>topic——>partition——>segment 

  segment file组成:由2大部分组成,分别为index file和data file,此2个文件一一对应,成对出现,后缀".index"和“.log”分别表示为segment索引文件、数据文件。

  

  segment文件命名规则:partion全局的第一个segment从0开始,后续每个segment文件名为上一个segment文件最后一条消息的offset值。数值最大为64位long大小,19位数字字符长度,没有数字用0填充。

  segment中index与data file对应关系物理结构如下:

        

  索引文件存储大量元数据,数据文件存储大量消息,索引文件中元数据指向对应数据文件中message的物理偏移地址。

  其中以索引文件中元数据3,497为例,依次在数据文件中表示第3个message(在全局partiton表示第368772个message),以及该消息的物理偏移地址为497。

  

副本(replication)策略 

    1.数据同步

    kafka 0.8后提供了Replication机制来保证Broker的failover。

    引入Replication之后,同一个Partition可能会有多个Replica,而这时需要在这些Replication之间选出一个Leader,Producer和Consumer只与这个Leader交互,其它Replica作为Follower从Leader中复制数据。

  2.副本放置策略  

    Kafka分配Replica的算法如下(注意!!! 下面的broker、partition副本数这些编号都是从0开始编号的):

      将所有存活的N个Brokers和待分配的Partition排序

      将第i个Partition分配到第(i mod n)个Broker上,这个Partition的第一个Replica存在于这个分配的Broker上,并且会作为partition的优先副本( 这里就基本说明了一个topic的partition在集群上的大致分布情况 )

      将第i个Partition的第j个Replica分配到第((i + j) mod n)个Broker上

      假设集群一共有4个brokers,一个topic有4个partition,每个Partition有3个副本。下图是每个Broker上的副本分配情况。

             

 

 

对于Kafka而言,定义一个Broker是否“活着”包含两个条件:

  • 一是它必须维护与ZooKeeper的session(这个通过ZooKeeper的Heartbeat机制来实现)。

  • 二是Follower必须能够及时将Leader的消息复制过来,不能“落后太多”。

 

重点在于kafka中partition的副本放置算法,同时间接说明了一个topic的partition在集群中的分配情况...

 

转载于:https://www.cnblogs.com/xjh713/p/7388262.html

相关文章:

  • Eclipse快捷键大全
  • IDA*算法——骑士精神
  • cygwin的安装若干问题
  • bfs
  • Anaconda使用(转载)
  • stl vector源码剖析
  • 【Android Dev Guide - 04】 - Media - 学习使用MediaPlayer播放音乐
  • android开发学习之路——连连看之游戏界面(一)
  • 安装GoldenGate错误OGG-01756
  • 源码阅读经验谈-slim,darknet,labelimg,caffe(1)
  • 【AMQ】之JMS概念
  • GoldenGate之目录详解
  • 【AMQ】之JMS Mesage structure(JMS消息结构)
  • 十五、多项式乘法与快速傅里叶变换
  • 八大排序算法的python实现(二)希尔排序
  • php的引用
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【347天】每日项目总结系列085(2018.01.18)
  • Apache Spark Streaming 使用实例
  • C学习-枚举(九)
  • hadoop集群管理系统搭建规划说明
  • Javascript Math对象和Date对象常用方法详解
  • Java的Interrupt与线程中断
  • Koa2 之文件上传下载
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • maven工程打包jar以及java jar命令的classpath使用
  • MySQL-事务管理(基础)
  • React-redux的原理以及使用
  • SQLServer之创建显式事务
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • tweak 支持第三方库
  • 基于webpack 的 vue 多页架构
  • 前端面试题总结
  • 前言-如何学习区块链
  • 思维导图—你不知道的JavaScript中卷
  • 微信小程序--------语音识别(前端自己也能玩)
  • 选择阿里云数据库HBase版十大理由
  • ​iOS实时查看App运行日志
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #Linux(帮助手册)
  • (02)vite环境变量配置
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (Python第六天)文件处理
  • (二)springcloud实战之config配置中心
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (利用IDEA+Maven)定制属于自己的jar包
  • (十五)使用Nexus创建Maven私服
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)Oracle 9i 数据库设计指引全集(1)
  • **CI中自动类加载的用法总结
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .net 获取url的方法
  • .NET关于 跳过SSL中遇到的问题
  • .NET连接数据库方式
  • @JSONField或@JsonProperty注解使用