自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 nio demo

nio demo

2017-05-04 17:13:59 638

转载 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

mysqld_exporter-0.10.0.linux-amd64.tar.gz

mysqld_exporter-0.10.0.linux-amd64.tar.gz

2021-04-19

zabbix-3.0.10.tar.gz

zabbix-3.0.10.tar.gz

2021-04-19

ngrok-stable-linux-amd64.zip

ngrok-stable-linux-amd64.zip

2021-04-19

curl-7.63.0.tar.gz

curl-7.63.0.tar.gz

2021-04-19

apollo-1.4.0.tar.gz

apollo-1.4.0.tar.gz

2021-04-19

jemalloc-4.4.0.tar.bz2

jemalloc-4.4.0.tar.bz2

2021-04-19

datax.tar.gz

datax.tar.gz

2021-04-19

maxwell-1.28.0.tar.gz

maxwell-1.28.0.tar.gz

2021-04-19

esrally-dist-1.0.4.tar.gz

esrally-dist-1.0.4.tar.gz

2021-04-19

Percona-XtraBackup-2.4.9-ra467167cdd4-el7-x86_64-bundle.tar

Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁)。XtraBackup支持所有的Percona Server、MySQL、MariaDB和Drizzle

2017-12-31

tomcat6.x服务器

这是我用过的最稳定的tomcat服务器,虽然现在7.x都升级到了30,但是这款仍是最爱

2012-11-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除