Kafka Topic动态迁移 (源代码解析)

总结下自己在尝试Kafka分区迁移过程中对这部分知识的理解,请路过高手指正。

关于Kafka数据迁移的具体步骤指导,请参考如下链接:http://www.cnblogs.com/dycg/p/3922352.html原文作者写的非常清晰。

本文主要侧重自己对相关Kafka源代码的理解:

generateAssignment()函数 (对应上述链接原文中的  --generate 参数)产生新的迁移计划,输出格式为Json字符串;

executeAssignment ()函数(对应上述链接原文中的  --execute 参数)并不是真正执行分区数据迁移,他只是将上面生成的迁移计划保存到ZK中,路径为 /admin/reassign_partitions

Broker controller在启动或者重新选举时,会初始化一个ZK Watch --- 针对/admin/reassign_partition的监听(PartitionsReassignedListener);

我们通过命令行启动一次新的Topic数据迁移,会触发这个Listener,,从而使得Broker Controller开始迁移操作。

在处理Topic迁移事件之前,Controller会做一下预检,以下两种情况将不被迁移:
    a. 某个Partition正在被迁移;
    b. 该Topic已经列入被删除(Delete)之列;

关于Kafka数据迁移的步骤,具体实现在 kafka controller中的onPartitionReassignment()函数:

在详细介绍迁移步骤之前,先解释三个术语:

RAR: 新的replica位置映射(replica[Topic+Partition] <--> Broker, 以下同。)

OAR: 原来的replica位置映射 AR:    目前的replica位置映射

Kafka (Topic)Partition迁移步骤:

<1> Kafka Controller首先会将存储在ZK中的AR信息更新为 RAR+OAR, 然后为每个partition更新leaderEpoch和ISR; <2> 接下来Controller会等待RAR中所有的replica都完成与各自leader的同步,并将RAR中所有的replica设为在线状态; <3> 两种条件下需要重新进行Replica Leader选举:      a. 如果RAR中不包含一个Partition的Replica Leader;     b. 或者RAR中包含这个Partition的Replica Leader, 但是Leader所在的Broker挂掉了。 <4> 将OAR-RAR得到的差集中所有Replica(被迁移到其他Broker节点上的源replica)设为Offline,ZK中的ISR信息也会自动剔除Offline Replica; <5> 将第四步中处于(OAR-RAR)的Replica设为不存在状态(NonExistentReplica),最终触发相关replica的物理删除; <6> ZK中的AR信息被更新为 RAR; <7> 从ZK中/admin/reassign_partitions路径删除这个Partition; <8> 告知Brokers更新Metadata ( leaderEpoch之类 );

时间: 2024-10-15 07:08:59

Kafka Topic动态迁移 (源代码解析)的相关文章

Spring源代码解析

Spring源代码解析(一):IOC容器:http://www.iteye.com/topic/86339 Spring源代码解析(二):IoC容器在Web容器中的启动:http://www.iteye.com/topic/86594 Spring源代码解析(三):Spring JDBC:http://www.iteye.com/topic/87034 Spring源代码解析(四):Spring MVC:http://www.iteye.com/topic/87692 Spring源代码解析(五

Spring源代码解析(收藏)

Spring源代码解析(收藏)Spring源代码解析(一):IOC容器:http://www.iteye.com/topic/86339 Spring源代码解析(二):IoC容器在Web容器中的启动:http://www.iteye.com/topic/86594 Spring源代码解析(三):Spring JDBC:http://www.iteye.com/topic/87034 Spring源代码解析(四):Spring MVC:http://www.iteye.com/topic/8769

kafka集群扩容后的topic分区迁移

kafka集群扩容后的topic分区迁移 ./bin/kafka-topics.sh --zookeeper node3:2181,node4:2181,node5:2181  --alter --topic dftt --partitions 4 kafka集群扩容后,新的broker上面不会数据进入这些节点,也就是说,这些节点是空闲的:它只有在创建新的topic时才会参与工作.除非将已有的partition迁移到新的服务器上面:所以需要将一些topic的分区迁移到新的broker上. kaf

kvm 静态迁移、基于nfs的动态迁移

参考<kvm 虚拟化技术,实战与原理解析> 迁移:迁移包含系统整体的迁移和某个工作负载的迁移,按照迁移的特性可以分为以下几类: 静态迁移(冷迁移):指迁移过程中明显有一段时间,客户机的服务不可用,它还可以分为两种,一种是完全关闭客户机后,将硬盘镜像复制到另外的宿主机再启动起来,这种不会保存客户机的工作负载状态: 还有一种并不完全关闭客户机而是暂停客户机,而后用快照之类的方式,把当前的状态做成快照,复制快照到新的宿主机上启动. 动态迁移(热迁移):是指保证客户机上应用服务正常运行的同时,完成迁移

kafka topic制定规则

kafka topic的制定,我们要考虑的问题有很多,比如生产环境中用几备份.partition数目多少合适.用几台机器支撑数据量,这些方面如何去考量?笔者根据实际的维护经验,写一些思考,希望大家指正. 1.replicas数目 可以从上图看到,备份越多,性能越低,因为kafka的写入只写入主分区,备份相当于消费者从主分区pull数据,这样势必会造成性能的损耗,故建议在生产环境中使用一主一备即可. 2. partition数量 (1)设置partition数量的时候我们需要注意:kafka的pa

Spark MLlib LDA 源代码解析

1.Spark MLlib LDA源代码解析 http://blog.csdn.net/sunbow0 Spark MLlib LDA 应该算是比較难理解的,当中涉及到大量的概率与统计的相关知识,并且还涉及到了Spark GraphX图计算方面的知识.要想明确当中的原理得要下一番功夫. LDA源代码解析前的基础知识: 1)LDA主题模型的理论知识 參照:LDA数学八卦 2)SparkGraphX 基础知识 http://blog.csdn.net/sunbow0/article/details/

重磅精品翻译:QEMU-KVM虚机动态迁移原理

编者的话 本文翻译者,KVM社区首席翻译专家武楠. 本文详细的介绍了虚拟化迁移的原理. 翻译过程是怎样一个过程,会有怎样的收获? 个人感觉是翻译过程是一个挑战自我,不断完善自己,然后获得提升的过程. 翻译过程也是一个近距离和技术对话的过程,从字里行间理解.揣摩技术的精髓,在翻译成中文的时候斟酌,是一个反复理解的过程,最终的收获是知识. 请愿意加入KVM社区翻译群的朋友联系群主微信xiaoli173702,再技术翻译的过程中我们一起讨论,一起提升. QEMU-KVM虚机动态迁移原理 在虚拟化领域,

使用NoSQL实现高并发CRM系统实践(源代码+解析)

又想速度快,又要大数据,又要保证数据不出错,还要拥抱变化,改需求的时候不那么痛苦,特别是字段的调整,按照以前的做法,想想就头疼.使用NoSQL,简直就是随心所欲,再奇葩的数据结构,处理起来也很容易.下面看我如何用NoSQL数据库实现高并发,高可靠的CRM系统. 1.前言 随着facebook.微博等WEB2.0互联网网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本

OpenStack之虚机热迁移代码解析

OpenStack之虚机热迁移代码解析 话说虚机迁移分为冷迁移以及热迁移,所谓热迁移用度娘的话说即是:热迁移(Live Migration,又叫动态迁移.实时迁移),即虚机保存/恢复(Save/Restore):将整个虚拟机的运行状态完整保存下来,同时可以快速的恢复到原有硬件平台甚至是不同硬件平台上.恢复以后,虚机仍旧平滑运行,用户不会察觉到任何差异.OpenStack的虚机迁移是基于Libvirt实现的,下面来看看Openstack虚机热迁移的具体代码实现. 首先,由API入口进入到nova/