kafka删除节点怎么删除

如题所述

第1个回答  2016-11-18
Kafka是由LinkedIn设计的一个高吞吐量、分布式、基于发布订阅模式的消息系统,使用Scala编写,它以可水平扩展、可靠性、异步通信和高吞吐率等特性而被广泛使用。目前越来越多的开源分布式处理系统都支持与Kafka集成,其中SparkStreaming作为后端流引擎配合Kafka作为前端消息系统正成为当前流处理系统的主流架构之一。然而,当下越来越多的安全漏洞、数据泄露等问题的爆发,安全正成为系统选型不得不考虑的问题,Kafka由于其安全机制的匮乏,也导致其在数据敏感行业的部署存在严重的安全隐患。本文将围绕Kafka,先介绍其整体架构和关键概念,再深入分析其架构之中存在的安全问题,最后分享下Transwarp在Kafka安全性上所做的工作及其使用方法。Kafka架构与安全首先,我们来了解下有关Kafka的几个基本概念:Topic:Kafka把接收的消息按种类划分,每个种类都称之为Topic,由唯一的TopicName标识。Producer:向Topic发布消息的进程称为Producer。Consumer:从Topic订阅消息的进程称为Consumer。Broker:Kafka集群包含一个或多个服务器,这种服务器被称为Broker。Kafka的整体架构如下图所示,典型的Kafka集群包含一组发布消息的Producer,一组管理Topic的Broker,和一组订阅消息的Co... Kafka是由LinkedIn设计的一个高吞吐量、分布式、基于发布订阅模式的消息系统,使用Scala编写,它以可水平扩展、可靠性、异步通信和高吞吐率等特性而被广泛使用。目前越来越多的开源分布式处理系统都支持与Kafka集成,其中SparkStreaming作为后端流引擎配合Kafka作为前端消息系统正成为当前流处理系统的主流架构之一。然而,当下越来越多的安全漏洞、数据泄露等问题的爆发,安全正成为系统选型不得不考虑的问题,Kafka由于其安全机制的匮乏,也导致其在数据敏感行业的部署存在严重的安全隐患。本文将围绕Kafka,先介绍其整体架构和关键概念,再深入分析其架构之中存在的安全问题,最后分享下Transwarp在Kafka安全性上所做的工作及其使用方法。Kafka架构与安全首先,我们来了解下有关Kafka的几个基本概念:Topic:Kafka把接收的消息按种类划分,每个种类都称之为Topic,由唯一的TopicName标识。Producer:向Topic发布消息的进程称为Producer。Consumer:从Topic订阅消息的进程称为Consumer。Broker:Kafka集群包含一个或多个服务器,这种服务器被称为Broker。Kafka的整体架构如下图所示,典型的Kafka集群包含一组发布消息的Producer,一组管理Topic的Broker,和一组订阅消息的Consumer。Topic可以有多个分区,每个分区只存储于一个Broker。Producer可以按照一定的策略将消息划分给指定的分区,如简单的轮询各个分区或者按照特定字段的Hash值指定分区。Broker需要通过ZooKeeper记录集群的所有Broker、选举分区的Leader,记录Consumer的消费消息的偏移量,以及在ConsumerGroup发生变化时进行relalance.Broker接收和发送消息是被动的:由Producer主动发送消息,Consumer主动拉取消息。然而,分析Kafka框架,我们会发现以下严重的安全问题:1.网络中的任何一台主机,都可以通过启动Broker进程而加入Kafka集群,能够接收Producer的消息,能够篡改消息并发送给Consumer。2.网络中的任何一台主机,都可以启动恶意的Producer/Consumer连接到Broker,发送非法消息或拉取隐私消息数据。3.Broker不支持连接到启用Kerberos认证的ZooKeeper集群,没有对存放在ZooKeeper上的数据设置权限。任意用户都能够直接访问ZooKeeper集群,对这些数据进行修改或删除。4.Kafka中的Topic不支持设置访问控制列表,任意连接到Kafka集群的Consumer(或Producer)都能对任意Topic读取(或发送)消息。随着Kafka应用场景越来越广泛,特别是一些数据隐私程度较高的领域(如道路交通的视频监控),上述安全问题的存在犹如一颗定时炸弹,一旦内网被黑客入侵或者内部出现恶意用户,所有的隐私数据(如车辆出行记录)都能够轻易地被窃取,而无需攻破Broker所在的服务器。Kafka安全设计基于上述分析,Transwarp从以下两个方面增强Kafka的安全性:身份认证(Authentication):设计并实现了基于Kerberos和基于IP的两种身份认证机制。前者为强身份认证,相比于后者具有更好的安全性,后者适用于IP地址可信的网络环境,相比于前者部署更为简便。权限控制(Authorization):设计并实现了Topic级别的权限模型。Topic的权限分为READ(从Topic拉取数据)、WRITE(向Topic中生产数据)、CREATE(创建Topic)和DELETE(删除Topic)。基于Kerberos的身份机制如下图所示:Broker启动时,需要使用配置文件中的身份和密钥文件向KDC(Kerberos服务器)认证,认证通过则加入Kafka集群,否则报错退出。Producer(或Consumer)启动后需要经过如下步骤与Broker建立安全的Socket连接:1.Producer向KDC认证身份,通过则得到TGT(票证请求票证),否则报错退出2.Producer使用TGT向KDC请求Kafka服务,KDC验证TGT并向Producer返回SessionKey(会话密钥)和ServiceTicket(服务票证)3.Producer使用SessionKey和ServiceTicket与Broker建立连接,Broker使用自身的密钥解密ServiceTicket,获得与Producer通信的SessionKey,然后使用SessionKey验证Producer的身份,通过则建立连接,否则拒绝连接。ZooKeeper需要启用Kerberos认证模式,保证Broker或Consumer与其的连接是安全的。Topic的访问控制列表(ACL)存储于ZooKeeper中,存储节点的路径为/acl//,节点数据为R(ead)、W(rite)、C(reate)、D(elete)权限的集合,如/acl/transaction/jack节点的数据为RW,则表示用户jack能够对transaction这个topic进行读和写。另外,kafka为特权用户,只有kafka用户能够赋予/取消权限。因此,ACL相关的ZooKeeper节点权限为kafka具有所有权限,其他用户不具有任何权限。构建安全的Kafka服务首先,我们为Broker启用Kerberos认证模式,配置文件为/etc/kafka/conf/server.properties,安全相关的参数如下所示:其中,authentication参数表示认证模式,可选配置项为simple,kerberos和ipaddress,默认为simple。当认证模式为kerberos时,需要额外配置账户属性principal和对应的密钥文件路径keytab.认证模式为ipaddress时,Producer和Consumer创建时不需要做任何改变。而认证模式为kerberos时,需要预先创建好相应的principal和keytab,并使用API进行登录,样例代码如下所示:publicclassSecureProducerextendsThread{privatefinalkafka.javaapi.producer.Producerproducer;privatefinalStringtopic;privatefinalPropertiesprops=newProperties();publicSecureProducer(Stringtopic){AuthenticationManager.setAuthMethod(“kerberos”);AuthenticationManager.login(“producer1″,“/etc/producer1.keytab”);props.put(“serializer.class”,“kafka.serializer.StringEncoder”);props.put(“metadata.broker.list”,“172.16.1.190:9092,172.16.1.192:9092,172.16.1.193:9092″);//Userandompartitioner.Don’tneedthekeytype.JustsetittoInteger.//ThemessageisoftypeString.producer=newkafka.javaapi.producer.Producer(newProducerConfig(props));this.topic=topic;}...Topic权限管理Topic的权限管理主要是通过AuthorizationManager这个类来完成的,其类结构如下图所示:其中,resetPermission(user,Permissions,topic)为重置user对topic的权限。grant(user,Permissions,topic)为赋予user对topic权限。revoke(user,Permissions,topic)为取消user对topic权限。isPermitted(user,Permissions,topic)为检查user对topic是否具有指定权限。调用grant或revoke进行权限设置完成后,需要commit命令提交修改到ZooKeeperKerberos模式下,AuthorizationManager需要先使用AuthenticationManager.login方法登录,与ZooKeeper建立安全的连接,再进行权限设置。示例代码如下所示:publicclassAuthzTest{publicstaticvoidmain(String[]args){Propertiesprops=newProperties();props.setProperty(“authentication”,“kerberos”);props.setProperty(“zookeeper.connect”,“172.16.2.116:2181,172.16.2.117:2181,172.16.2.118:2181″);props.setProperty(“principal”,“kafka/host1@TDH”);props.setProperty(“keytab”,“/usr/lib/kafka/config/kafka.keytab”);ZKConfigconfig=newZKConfig(props);AuthenticationManager.setAuthMethod(config.authentication());AuthenticationManager.login(config.principal(),config.keytab());AuthorizationManagerauthzManager=newAuthorizationManager(config);//resetpermissionREADandWRITEtoip172.16.1.87ontopictestauthzManager.resetPermission(“172.16.1.87″,newPermissions(Permissions.READ,Permissions.WRITE),“test”);//grantpermissionWRITEtoip172.16.1.87ontopictestauthzManager.grant(“172.16.1.87″,newPermissions(Permissions.CREATE),“test”);//revokepermissionREADfromip172.16.1.87ontopictestauthzManager.revoke(“172.16.1.87″,newPermissions(Permissions.READ),“test”);//committhepermissionsettingsauthzManager.commit();authzManager.close();}}ipaddress认证模式下,取消和赋予权限的操作如下所示:publicclassAuthzTest{publicstaticvoidmain(String[]args){Propertiesprops=newProperties();props.setProperty(“authentication”,“ipaddress”);props.setProperty(“zookeeper.connect”,“172.16.1.87:2181,172.16.1.88:2181,172.16.1.89:2181″);ZKConfigconfig=newZKConfig(props);//newauthorizationmanagerAuthorizationManagerauthzManager=newAuthorizationManager(config);//resetpermissionREADandWRITEtoip172.16.1.87ontopictestauthzManager.resetPermission(“172.16.1.87″,newPermissions(Permissions.READ,Permissions.WRITE),“test”);//grantpermissionWRITEtoip172.16.1.87ontopictestauthzManager.grant(“172.16.1.87″,newPermissions(Permissions.CREATE),“test”);//revokepermissionREADfromip172.16.1.87ontopictestauthzManager.revoke(“172.16.1.87″,newPermissions(Permissions.READ),“test”);//committhepermissionsettingsauthzManager.commit();authzManager.close();}}总结与展望本文通过介绍Kafka现有架构,深入挖掘其中存在的安全问题,并给出Transwarp在Kafka安全上所做的工作及其使用方式。然而,纵观Hadoop&Spark生态系统,安全功能还存在很多问题,各组件的权限系统独立混乱,缺少集中易用的账户管理系统。某些组件的权限管理还很不成熟,如Spark的调度器缺少用户的概念,不能限制具体用户使用资源的多少。Transwarp基于开源版本,在安全方面已有相当多的积累,并持续改进开发,致力于为企业用户提供一个易用、高效、安全和稳定的基础数据平台。

源码解析kafka删除topic
首先,配置参数`delete.topic.enable`为`True`,这是Broker级别的配置,用于指示kafka是否允许执行topic删除操作。其次,执行命令`bin\/kafka-topics.sh --zookeeper zk_host:port\/chroot --delete --topic my_topic_name`,此命令指示kafka删除指定的topic。若未配置`delete.topic.enable`为`True`,topic...

怎么彻底删除kafka的topic,然后重建
1. 删除logs下的相关记录;2. 到zookeeper下的brokers\/topics删除相关节点。---不好用!!先逻辑删除(.\/bin\/kafka-run-class.sh kafka.admin.DeleteTopicCommand --topic dnsTopic --zookeeper 10.0.1.44:2181,10.0.1.45:2181,10.0.1.46:2181),后物理删除(删除log文件)。---如果是删...

阿里四面:kafka何时、如何删除Topic?
1. **元数据更新**:确保主题在集群元数据中被正确标记为删除状态。2. **同步删除**:通过 DeletionClient 接口,将删除主题的事件同步到所有 Broker 上,确保集群状态一致。3. **元数据缓存清理**:通过调用 sendMetadataUpdate 方法,告知所有 Broker 不再为已删除主题的分区提供服务,同时更新缓存...

Kafka 删除一个topic的旧消息
1.高版本的kafka,提供了直接删除n条消息的操作方法。脚本内容地址:使用这个脚本, 配套的还有一个json文件。 新建一个json文件,内容如下,里面指定了partition和offset. 然后把这个文件保存为 offset.json 这时候调用脚本,可以做到删除 2.如果上述方法,提示错误:则说明kafka版本过低,这时候可以使用另...

Kafka 源码解析之 Topic 的新建\/扩容\/删除
Kafka Topic 删除这部分的逻辑是一个单独线程去做的,这个线程是在 Controller 启动时初始化和启动的。TopicDeletionManager 初始化 TopicDeletionManager 启动实现如下所示:TopicDeletionManager 启动时只是初始化了一个 DeleteTopicsThread 线程,并启动该线程。TopicDeletionManager 这个类从名字上去看,它...

kafka常用命令(基于2.6版本)
删除topic(仅标记):配置delete.topic.enable=true后,手动删除ZooKeeper节点或通过Controller重选等方法。修改分区副本数:先创建reassign.json文件,然后使用bin\/kafka-reassign-partitions.sh执行迁移。生产者与消费者操作生产者:发送消息使用bin\/kafka-console-producer.sh --broker-list localhost:9092 --...

当kafka集群其中一台宕机后,会怎么样?
由于__consumer_offsets是kafka默认的主题,无法删除,我们可以删除zookeeper中的__consumer_offsets。 进入zookeeper\/bin目录执行.\/zkCli.sh 先将集群停掉 在重新启动zookeeper和kafka 再次查看__consumer_offsets。发现副本数已经是3 在节点1修改__consumer_offsets后,在节点2和节点3查看__consumer_...

Kafka的Topic配置详解
(C)删除topic级别配置参数 注:配置的kafka集群的根目录为\/config\/mobile\/mq\/mafka02,因此所有节点信息都在此目录下。cleanup.policy delete.retention.ms delete.retention.ms flush.messages flush.ms index.interval.bytes message.max.bytes min.cleanable.dirty.ratio retention.bytes retention.ms segme...

kafka如何保证消息不丢
2. 复制和备份:Kafka使用副本机制来确保消息不会丢失。每个分区都有一个备份副本,可以在主分区出现故障时使用。3. 确认机制:Kafka的消息传递基于发布-订阅模型,消费者在接收到消息后会向服务器发送确认。服务器在接收到确认后,会将该消息从内存中删除,从而释放空间。4. 崩溃恢复:Kafka在内部实现了...

kafka问题求助
Topic的权限分为READ(从Topic拉取数据)、WRITE(向Topic中生产数据)、CREATE(创建Topic)和DELETE(删除Topic)。基于Kerberos的身份机制如下图所示:Broker启动时,需要使用配置文件中的身份和密钥文件向KDC(Kerberos服务器)认证,认证通过则加入Kafka集群,否则报错退出。Producer(或Consumer)启动后需要经过如下步骤与Broker建立...

相似回答