Kafka学习之Replication tools之controlled shutdown

原文地址:https://cwiki.apache.org/confluence/display/KAFKA/Replication+tools#Replicationtools-1.ControlledShutdown

controlled shutdown是啥意思?

在0.8版本中,每一个partition可以有多个replica。这些replica分布在多个broker上,提供了高可用。在任意的时间点上,只有一个replica可以提供读和写服务。换句话说,只有一个replica可以充当leader的角色。当一个broker需要关闭时(如果需要升级版本,改变配置参数时需要关闭),那么需要把当前broker上提供服务的leader partition迁移到其他同步中(in-sync)的replica上,这就是controlled shutdown工具的作用。

 

总的来说,它会减少不可用的时间窗口。如果我们简单的关闭一个broker而没有controlled shutdown的话,该broker上的leader partition就会不可用,直到选出一个新的leader。然后我们会顺序的每次选出一个partition作为leader,这个操作对ZK进行读写,选出所有的leader会花掉一些时间,特别是当有很多partition的时候。做一次controlled shutdown允许我们主动的转移leader,以此来减少不可用的时间窗口,有两种方法可以做到这一点。

 

第一种方法是在broker的配置文件中设置controlled.shutdown.enable。这样在broker关闭之前会尝试转移自己的leader到其他的broker上。还可以设置controlled.shutdown.max.retries和controlled.shutdown.retry.backoff.ms来控制在执行过程中的最大耗费时间和重试次数。

 

第二种方法是运行一个命令行工具。

下面是这个工具的工作步骤的汇总:

 

1,找到controller所在的broker的jmx端口。

2,使用要shutdown的broker的端口,向controller发出一个shutdown命令。
3,controller找到broker上当前的leader partition。
4,对于每一个leader partition,controller找到其他broker上的in-sync replica,并在其中选出一个作为leader。
5,如果不能选出leader,那么shutdown失败。
6,命令行工具等待controller的响应。如果发现shutdown不成功,就会重试(可配置)并最终基于controller的响应成功或失败。

 

注意这个工具仅仅把leadership转移到其他的可用的broker上。它并不会terminate当前的broker。你需要手动的关闭它。

 

如何使用?

bin/kafka-run- class .sh kafka.admin.ShutdownBroker --zookeeper localhost: 12913 /kafka --broker #brokerId# --num.retries 3 --retry.interval.ms 60

此工具接收一个zookeeper host列表的参数(如果有namespace的话需要包括进去)和想要shutdown的broker id,这两个是必填参数。另外还有一个可选的重试次数和重试之间的时间间隔的设置。如果controller进行shutdown失败,在指定的间隔后会重试。

 

FAQ

当ack为0时,此工具如何工作?

当一个partition的leadership改变时,当client(producer和consumer)还在对老的leader进行生产,消费,或者等待一个响应时会得到一个错误,client然后会从ZK刷新partition的元数据,并获得partition的新的leader,然后重试。但当producer client设置ack=0的话就不会这样做,这是因为producer不会等待响应结果,也就不知道leadership改变。client会end up loosing messages直到shutdown的broker重新跑起来。

 

当一个partition的in-sync集合中没有其他的replica时会发生什么?

When a partition does not have any other replicas that are in the "in-sync" set, the tool fails to shutdown the broker. This is to ensure that we do not have an unclean leader election (choosing a replica that is outside the "in-sync" set) and thereby causing data loss. 当这种情况发生时,此工具的shutdown会失败。因为要保证不会出现一个unclean的leader选举(选择一个不再in-sync集合的replica),因为会导致数据丢失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值