Kafka群集已从PLAINTEXT更新为SASL_PLAINTEXT,无法使Mirrormaker工作

时间:2018-11-12 12:15:29

标签: apache-kafka

我们在两个数据中心中有两个单独的kafka集群,并且已配置Mirrormaker来复制一组主题。每个数据中心都通过kafka和mirrormaker运行3个节点。此设置运行正常。

要实现更高的安全性,我们需要SASL_PLAINTEXT或更佳的SASL_SSL。

我在所有三个节点上的一个数据中心中配置了SASL_PLAINTEXT:

添加到/ etc / sysconfig / kafka:

Djava.security.auth.login.config=/etc/kafka/kafka_server.jaas"

创建了/etc/kafka/kafka_server.jaas:

KafkaServer {
 org.apache.kafka.common.security.plain.PlainLoginModule required
   username="admin"
   password="admin-secret"

};
KafkaClient {
  org.apache.kafka.common.security.plain.PlainLoginModule required
  username="admin"
  password="admin-secret"
  ;
};

更改了/etc/kafka/server.properties中的侦听器:

listeners=PLAINTEXT://0.0.0.0:443,SASL_PLAINTEXT://0.0.0.0:29093,SASL_SSL://0.0.0.0:29094
advertised.listeners=PLAINTEXT://node1.app.gen.local:443,SASL_PLAINTEXT://node1.app.gen.local:29093,SASL_SSL://node1.app.gen.local:29094

已添加到/etc/kafka/server.properties:

authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
allow.everyone.if.no.acl.found=true
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
super.users=User:admin
zookeeper.set.acl=false

这些更改之后,已在第一个kafka节点上执行了成功的测试,以测试SASL端口,如下所示:

export KAFKA_OPTS="-Djava.security.auth.login.config=/etc/kafka/kafka_server.jaas"
/u01/app/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:29093 --topic topictest1 --from-beginning --consumer.config=/etc/kafka/consumer.properties

/etc/kafka/consumer.properties:

security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
bootstrap.servers=localhost:29093

/etc/kafka/producer.properties:

security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
bootstrap.servers=localhost:29093

因此,新创建的SASL端口上的使用者可以读取群集中尚未设置ACL的现有主题。这也是预期的行为。

现在唯一的问题是,在新的安全群集和第二个非安全群集之间,mirrormaker已损坏。试图通过对包含mirrormaker使用者属性的文件进行以下更改来修复它:/etc/kafka/mirrormaker-consumer.properties

bootstrap.servers=node1.app.gen.local:29093,node2.app.gen.local:29093,node3.app.gen.local:29093 security.protocol=SASL_PLAINTEXT sasl.mechanism=PLAIN sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \ username="admin" \ password="admin-secret";

Mirrormaker启动,DEBUG日志中有很多条目,但是消息没有从受保护的群集复制到(仍然)不安全的群集。

我可能错过了什么?

1 个答案:

答案 0 :(得分:0)

谢谢,我通过您的建议解决了这一问题,即分别测试消费者和生产者。看来我在其中定义了带有主题“ *”的ACL,这阻止了Mirrormaker的使用者从其PLAINTEXT端口读取主题。

我学到的东西:如果将ACL放在一个主题上,则无法再从PLAINTEXT端口中读取它:-)