KafkaController源码分析之Broker的上线与下线
前言 本文主要聊聊某一个broker上线与下线时,集群是如何感知的 zk事件 在KafkaController#onControllerFailover方法中,会向zk注册一个brokerChangeHandler,它主要监听/brokers/ids下的子节点变化事件,我们知道该节点下就是每一个br ...
阅读更多
KafkaController源码分析之分区重分配(PartitionReassignment)与Preferred-leader副本选举
本文继续讲解Controller初始化过程,分析副本重分配过程 分区副本重分配 首先什么是分区副本重分配(PartitionReassignment),以下摘自《Apache Kafka实战》一书对其做了阐释 分区副本重分配操作通常都是由Kafka集群的管理员发起的,旨在对topic的所有分区重新 ...
阅读更多
KafkaController源码分析之副本状态机与分区状态机的启动
本文承接上篇kafka-server端源码分析之Controller初始化,继续讲解Controller初始化过程中副本状态机与分区状态机的启动 副本状态机 kafka将副本分为7个状态,下图是状态之间的流转图 副本状态用ReplicaState接口表示,需要说下validPreviousStat ...
阅读更多
KafkaController源码分析之Controller选举与初始化
本文来分析下kafka的重要模块——Controller,主要介绍Controller的选举与初始化过程 KafkaController 初始化的入口依然在KafkaServer#startup方法中 12345678// 创建BrokerInfo: {Broker{id,End ...
阅读更多
kafka-server端源码分析之Zookeeper初始化与Watcher监听事件分发
这一篇比较简单,快速带大家过一下kafka如何连接ZooKeeper,以及kafka对节点事件监听的代码设计 ZooKeeper大致介绍 kafka主要利用ZooKeeper选举Controller,这里先大致介绍下ZooKeeper的基本用法,仅用于学习Kafka ZNode 几乎所有的ZooKe ...
阅读更多
Spring IOC容器启动之初始化上下文
前言 本文采用AnnotationConfigApplicationContext作为上下文,如果是web容器大部分源码可用于参考,但不能保证一致。 Spring IOC容器的源码很多,分解为多篇文章来讲解, 测试代码 测试代码很简单,我这里用了spring自带的测试类ConfigForScanni ...
阅读更多
kafka消息格式与日志存储原理分析
kafka自0.11.0.0版本之后消息体升级到了V2版本,本文从生产者消息发送,broker消息存储,消息读取等几个部分作为切入点,来分析kafka的消息流转 写入 producer通过PRODUCE请求将消息发送给broker,我们来看一下发送的内容是什么 12345678910private ...
阅读更多
kafka本地启动后不打印日志问题
2020年的春节新冠状病毒肆虐,只能宅在家里(天赋异禀),闲来无事再次打开kafka项目阅读源码,但是从一开始就有个小问题困扰着我, kafka本地启动后不打印日志,虽然能运行,但是心里总是很难受,今日下定决心解决之 在kafka源码环境搭建一文中,启动kafka之后,控制台如下 和我们用命令 ...
阅读更多
Effective-java读书笔记(三):类和接口
使类和接口的可访问性最小化 模块设计原则:对外隐藏内部数据和实现细节,把api和他的实现隔离开来,模块之间通过api通信,一个模块不需要知道其它模块的内部细节,这称之为封装。 封装有效地让各模块直接解耦,解耦之后模块可以独立的开发,测试,优化,使用及修改。 尽可能地使每个类或者成员不被外界访问 ...
阅读更多
Effective java读书笔记(二):对象通用方法
对象通用方法 覆盖equals时的约定 当类具有特有的"逻辑相等"概念时,必须覆盖equals方法,这样也可以使这个类作为map的key,或者set中的元素 当对象非null时,equals方法满足以下四个特性: 自反性:x.equals(x)=true 对称性:x.equal ...
阅读更多