异常Kafka'修复'记
2019-08-15 本文已影响1人
WestC
近期由于测试Flink安全模式,找到一个安全的hadoop&kafka集群,测试过程中发现kafka集群各种异常(topic创建完没有leader,之前的topic无法消费,__consumer__offsets中部分partition没有leader),于是决心删除重装,经ambari删除添加发现如下深坑:
ambari在进行kafka清理时,不会将zk上kafka的znode清理
不会将各kafka节点上的数据目录清理
这大坑。。。
然而测试还是得继续。于是在集群上重新搭建一套新的kafka服务。然而原有的kafka集群已经创建的zknode和本地存储怎么办呢?会不会发生冲突呢?这里就用到的kafka自身的多集群能力了(一个zk集群,多套kafka的能力,当然这些kafka服务之间是没有关系的),其主要步骤如下
- 在zookeeper上创建znode节点 /myZkNode
- 配置并创建Kafka服务,
配置 | 默认值 | 值 |
---|---|---|
zookeeper.connect | localhost:2181 | hostname:port/myZkNode |
log.dirs | /tmp/kafka-logs | a new local dir |
- zookeeper.connect用于kafka服务连接zokeeper服务的url,kafka服务所有的znode创建将在此目录下进行,默认没有指定znode时的url,kafka的服务的所有znode节点均在根目录下
- 后续所有的topic的创建,授权等需要访问zk的操作,在指定zookeeper时,其url应当是hostname:port/myZkNode,如 kafka-topics.sh --zookeeper hostname:port/myZkNode,否则将无法找到此kafka服务
服务创建完之后的事情当然测试消息流程了,当用户a创建完topic之后,如果用户b使用,则需要对b用户进行授权,其授权主要包含几个方面:授权类型(授予什么样的权限),授权用户(授权给谁):授权消费组(以哪个消费组来消费),授权消费节点(来自哪个节点的消费)及其他细节。具体可参考kafka-acl.sh的help信息。
这里想指出的是如果为了方便想使用通配符 * 作为授权的对象的话,需要使用 '',如对所有的group均授权时,kafka-topics.sh --group '*'