- 博客(27)
- 资源 (12)
- 收藏
- 关注
原创 ReplicaStateMachine分析
ReplicaStateMachine是KafkaController维护副本的状态机,副本状态由ReplicaState表示,有七种不同的副本状态:一 副本状态的转化NonExistentReplica -> NewReplica新创建topic或者重新副本的时候都有可能创建新的副本,这时后副本就转换成NewReplica,在转换到时候
2017-05-31 17:25:35 682 1
原创 PartitionStateMachine分析
PartitionStateMachine是Controller Leader用于维护分区状态的状态机,分区状态时PartitionState,它有四个子类:一 分区的状态转换# NonExistentPartition -> NewPartition从zookeeper中加载partition的AR 集合到ControllerContext的p
2017-05-31 17:23:07 886 1
原创 PartitioinLeaderSelector分析
PartitionLeaderSelector主要负责分区leader副本的选举。1 NoOpLeaderSelectordefselectLeader(topicAndPartition:TopicAndPartition, currentLeaderAndIsr: LeaderAndIsr): (LeaderAndIsr,Seq[Int]) = { warn(
2017-05-31 17:20:34 780
原创 Kafka初始化和故障转移
Kafka启动都会创建KafkaController,然后会向zookeeper注册,第一个注册的节点就是Leader,其余都是follower。当KafkaController出现故障,不能继续管理集群,则那些KafkaController follower开始竞争成为新的LeaderKafkaController的启动过程是在startup方法中完成的:首先:注册一个SessionEx
2017-05-31 17:19:18 3860 1
原创 KafkaController 分区Rebalance平衡机制
private defcheckAndTriggerPartitionRebalance(): Unit = { if (isActive()) { trace("checking need to trigger partition rebalance") // 获取(存活的broker,AR副本集) => (2,Map([message,0]-> List(2,
2017-05-31 17:17:37 9932
原创 KafkaController介绍
在Kafka早期版本,对于分区和副本的状态的管理依赖于zookeeper的Watcher和队列:每一个broker都会在zookeeper注册Watcher,所以zookeeper就会出现大量的Watcher, 如果宕机的broker上的partition很多比较多,会造成多个Watcher触发,造成集群内大规模调整;每一个replica都要去再次zookeeper上注册监视器,当集群规模很大的时
2017-05-31 17:15:34 12498 4
原创 ControllerContext分析
ControllerContext维护了Controller使用到的上下文信息,而且还会缓存zookeeper一些数据 一 核心字段controllerChannelManager: ControllerChannelManager: 负责和kafka集群内部Server之间建立channel来进行通信shuttingDownBrokerIds:mutable.Set[Int] 正
2017-05-31 17:12:47 2138
原创 ControllerChannelManager分析
ControllerChannelManager是用来管理KafkaController Leader和集群中其他broker之间的网络交互,其中ControllerBrokerStateInfo表示与一个broker连接的各种信息,ControllerBrokerStateInfo的一些字段:networkClient:NetworkClient 负责维护controller 和 对应b
2017-05-31 17:11:35 1050
原创 ControllerBrokerRequestBatch分析
为了提高KafkaController Leader和集群其他broker的通信效率,实现批量发送请求的功能 leaderAndIsrRequestMap:保存了发往指定broker的LeaderAndIsrRequest请求相关的信息stopReplicaRequestMap: 保存了发往指定broker的StopReplicaRequest请求相关的信息updateMetada
2017-05-31 17:10:10 762
原创 MetadataCache分析
MetadataCache 是broker用来缓存当前集群中所有分区状态的组件,他需要通过KafkaController通过向集群中的broker发送UpdateMetadataRequest请求来更新MetadataCache中缓存的数据,每一个broker在收到请求后会异步更新MetadataCache中的数据 一 核心字段brokerId:Int 对应的broker的id
2017-05-31 17:06:51 1724
原创 ReplicaManager分析
一个broker可能分布多个Partition的副本信息,ReplicaManager主要负责管理一个broker范围内的Partition信息,然后它还根据KafkaController发送过来的命令,然后执行这些命令,比如LeaderAndIsr和StopReplica一 ReplicaManager 数据结构假设有5个broker节点,分区数目为3,备份因子为2:bro
2017-05-31 17:05:13 2428
原创 Partition分析
Partition负责管理每个副本对应的Replica对象,进行Leader副本的切换,ISR列表的管理以及调用日志存储系统完成写消息等一Partition核心字段topic: String 表示topic名字partitionId:Int 表示分区号replicaManager: ReplicaManager 管理副本的一个类localBrokerId:Int 当前的brok
2017-05-31 17:00:46 2971 1
原创 replica分析
Kafka引入副本机制的目的主要是为了增加kafka集群的高可用性。Kafka实现副本机制后,每个分区可以有多个副本,并且会从其副本集合(AR)中选举出一个Leader副本,负责所有的读写请求,剩余作为follower副本,follower副本会从leader副本fetch 消息到自己的log,以防止leader挂了,其余broker上的follower可以选举为leader继续对外提供服务。一般
2017-05-31 16:59:08 682
原创 OffsetIndex和TimeIndex分析
为了提高查找消息的性能,为每一个日志文件添加2个索引索引文件:OffsetIndex 和 TimeIndex,她俩分别对应着磁盘上两个索引文件,与FileMessageSet共同构成一个LogSegment对象。OffsetIndex索引文件的格式: 每一个索引项为8字节,其中相对offset占用4字节,消息的物理地址(position)占用4个字节 这样就实现了相对offset
2017-05-31 16:57:46 5128
原创 Log分析
Log是多个LogSegment的顺序组合,形成一个逻辑上的日志,为了实现快速定位LogSegment,Log使用跳跃表SkipList对LogSegment进行管理private val segments:ConcurrentNavigableMap[java.lang.Long, LogSegment] = new ConcurrentSkipListMap[java.lang.Lon
2017-05-31 16:54:13 1208
原创 LogSegment分析
为了防止Log文件过大,将Log切分成多个日志文件来管理,每一个日志文件对应着一个LogSegment。在LogSegment封装了TimeIndex,OffsetIndex以及FileMessageSet对象,提供日志文件和索引文件的读写功能和其他功能 一 LogSegment的核心字段log: 用于操作对应消息日志文件的FileMessageSet对象index: 用于操作
2017-05-31 16:52:37 1763
原创 LogManager分析
在一个broker上的log都是通过LogManger来管理的,LogManager主要负责日志管理,包括日志创建,日志获取,日志清理,所有的读写操作都要委托的那个日志实例一 核心字段logDirs: 日志目录flushCheckMs: flush检查时间retentionCheckMs: 日志保留检查时间scheduler:KafkaScheduler调度器,用于调度线程
2017-05-31 16:41:06 8554
原创 FileMessageSet分析
在Kafka中使用FileMessageSet管理日志文件,它对应着磁盘上一个真正的日志文件。FileMessageSet继承了MessaeSet抽象类,MessageSet。保存的数据格式分为三部分:8字节的ofset和4字节的size以及size子集的message 数据,前两个部分被称为LogOverhead。Kafka使用Message表示消息,Message使用ByteB
2017-05-31 16:34:24 804
原创 ByteBufferMessageSet分析
ByteBufferMessageSet底层使用ByteBuffer保存数据,它主要提供以下三种功能:# 将Message Set按照指定的压缩类型进行压缩,此功能主要用于构建ByteBufferMessageSet对象,通过create方法完成# 提供迭代器,实现深层迭代和浅层迭代2种方式# 提供消息验证和offset分配功能 create方法private defc
2017-05-31 16:30:32 680
原创 日志存储介绍
# Kafka使用日志文件的方式保存生产者发送的消息# 每一条消息都有一个offset值来表示它在分区中的偏移量,注意这个offset是一个逻辑值,并不是消息实际物理存储地址;它更加类似于数据库表中的主键,主键唯一却定了数据库表中的记录,offset也唯一却定了分区中的一条消息,逻辑图如下:
2017-05-31 16:23:42 1820
原创 python sqlalchemy orm
ORM 和 Core相比:ORM主要是关注用户定义的对象,而Core更关注的是Schema,创建一个metadata容器,然后声明一个表对象和该容器进行关联。在ORM中我们会定义一个类去继承一个父类:declarative_base,它主要是有一个medatada容器和一个mapper(将类映射成表) 一 通过ORM类定义Tables必须要做以下几件事情:# 继承父类decla
2017-05-07 22:52:19 1061
原创 python sqlalchemy core
SQLAlchemy是和很多数据库进行交互的一个库,他可以让你创建model,让你可以以一种python中面向对象的方式进行查询。使得你的代码和数据库可以分开,也就是减轻他们之间的依赖。让你进行数据库的切换或者迁移是很方便的。首先,你需要考虑的是使用SQLAlchemy Core还是SQLAlchemy ORM,这两种方式在解析方面稍有不同。但是最大的不同是访问是基于schema还是业务对象:
2017-05-07 22:49:31 2574 1
转载 消息队列应用场景
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性架构使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ二、消息队列应用场景以下介绍消息队列在实际应用中常用的使用场景。异步处理,应用解耦,流量削锋和消息通讯四个场景2.1异步处理场景说明:用
2017-05-05 10:35:53 461
原创 select poll epoll
一 虚拟存储器一个作业在运行之前,没有必要把全部作业装入内存,而仅将那些当前要运行的那部分页面或段,先装入内存便可以启动运行,其余部分暂时驻留磁盘程序在运行时,如果他所要访问的页面或者端已调入内存,便可以继续执行下去,但是如果程序页面和段尚未调入内存(页面缺失或缺段),此时程序要利用操作系统所提供的请求调页(段)功能,将他们调入内存,以使得进程能够继续执行下去如果此
2017-05-05 10:34:55 323
原创 rabbitMQ linux 安装步骤
在安装RabbitMQ之前,需要先安装erlang。wget http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpmrpm -Uvh erlang-solutions-1.0-1.noarch.rpmrpm --import http://packages.erlang-solutions.c
2017-05-05 09:19:29 1458
转载 python 3.x 不再支持MySQLdb 模块
MySQLdb 只适用于python2.x,发现pip装不上。它在py3的替代品是: import pymysqlpip install pymysqldjango+mysql而Django默认的还是使用 MySQLdb :执行会报: ImportError: No module named 'MySQLdb'解决:在站点的 __init__.py 文件
2017-05-01 16:42:57 6540
Percona-XtraBackup-2.4.9-ra467167cdd4-el7-x86_64-bundle.tar
2017-12-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人