原文地址: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),因为会导致数据丢失。
相关推荐
### Kafka学习之路——详解Kafka原理与架构 #### 一、Kafka简介 Kafka是一款由LinkedIn开发并开源的消息队列系统,它主要用于处理实时数据流,并能够支持在线和离线的日志处理需求。Kafka的基本特性包括高吞吐量、...
大数据,kafka
**Kafka Connect Tools详解** Kafka Connect 是 Apache Kafka 项目的一部分,它提供了一种可扩展且可靠的机制,用于在 Kafka 集群与其他数据存储系统之间进行数据迁移和集成。Kafka Connect Tools 是一套用于管理和...
本资料包提供了对Kafka深入理解所需的各种资源,包括图片解析、Java代码示例、学习文档以及安装指南。 1. **Kafka的核心概念** - **主题(Topic)**:Kafka中的数据被组织成主题,类似于数据库中的表,是消息的...
资源分类:Python库 所属语言:Python 资源全名:kafka-dev-tools-0.0.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
2. Kafka Streams:轻量级库,用于在Kafka之上构建复杂的应用程序。 3. KSQL:SQL-like查询语言,使Kafka数据流处理更加直观。 总之,Kafka以其高效、可靠和灵活的特性,已经成为大数据领域不可或缺的一部分。通过...
10. 代码实践《kafka学习代码》中可能包含了一些示例,涵盖了producer、consumer的创建、消息发送与接收、配置调整等内容,是深入理解Kafka工作原理和使用技巧的重要参考资料。 总结,Kafka作为一个分布式流处理...
《Kafka学习指南》 Apache Kafka是一款开源的流处理平台,由LinkedIn开发并捐赠给了Apache软件基金会。它最初设计为一个高吞吐量、低延迟的消息队列系统,现在已经成为大数据领域的重要组件,广泛用于实时数据流...
### Kafka学习详细文档笔记 #### 一、入门 **1、简介** Kafka是由LinkedIn开源的一款分布式的流处理平台,其核心功能在于消息传递。它能够处理大量的实时数据流,并且具备高性能、高吞吐量的特点。Kafka采用发布...
【大数据之Kafka学习】 Kafka是一个分布式消息系统,由LinkedIn开发并贡献给Apache基金会,成为其顶级项目。它主要用于处理大规模实时数据流,适用于多种场景,如Hadoop的批处理系统、实时处理系统、流处理引擎(如...
根据提供的文件信息,“Kafka全套学习视频”是一个专注于Apache Kafka技术的视频教程系列,旨在帮助学员全面掌握Kafka的相关知识和技术。以下是对该资源中可能涵盖的重要知识点进行的详细总结和解析。 ### 一、...
kafka消息队列学习笔记,kafka消息队列学习笔记,kafka消息队列学习笔记,kafka消息队列学习笔记,kafka消息队列学习笔记,kafka消息队列学习笔记,kafka消息队列学习笔记,kafka消息队列学习笔记,kafka消息队列...
《深入理解Kafka:分布式消息系统的奥秘》 在当今大数据时代,Kafka作为一个高性能、分布式的消息中间件,已经成为实时数据处理和流...通过深入学习和实践,你将能够充分利用Kafka的优势,解决复杂的数据处理挑战。
**Kafka Tool 连接 Kafka 工具详解** 在大数据处理和实时流处理领域,Apache Kafka 是一个不可或缺的组件,它作为一个分布式的消息中间件,提供高效、可扩展且可靠的发布订阅服务。为了方便管理和操作 Kafka 集群,...
《Kafka Tools:Java工具的高效使用指南》 在大数据处理领域,Apache Kafka作为一个分布式流处理平台,扮演着至关重要的角色。它不仅提供高吞吐量的消息传递,还能实现数据的持久化和实时处理。而Kafka Tools,正如...
kafkaTool工具是kafka的一个监控工具,可以监控kafka的集群健康情况
代码实例在Kafka学习资料中可能会展示如何配置Producer和Consumer,如何创建Topic和Partition,如何设置和管理消费者组,以及如何通过Kafka事务来保证消息的原子性。这些代码示例将会是理解Kafka实际操作的基础。 ...
kafka是最初由Linkedin公司开发,使用Scala语言编写,Kafka是一个分布式、分区的、多副本的、多订阅者的日志系统(分布 式MQ系统),可以用于web/nginx日志,搜索日志,监控日志,访问日志等等。 Kafka是一种分布式的...
【Kafka学习笔记】 Kafka是一款高性能的分布式消息中间件,广泛应用于大数据实时处理和流处理领域。它具有高吞吐量、低延迟、可扩展性以及容错性等特点,常用于日志收集、监控数据聚合、用户行为追踪等多个场景。 ...