Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 如何为正在运行的集群中的ACL创建Kafka用户和使用者组?_Apache Kafka - Fatal编程技术网

Apache kafka 如何为正在运行的集群中的ACL创建Kafka用户和使用者组?

Apache kafka 如何为正在运行的集群中的ACL创建Kafka用户和使用者组?,apache-kafka,Apache Kafka,我在SASL_纯文本模式下使用Kafka 2.1,用于控制创建用户和组所需主题的ACL。那么,如何在运行集群中创建用户呢 我知道我可以使用kafka consumer groups.sh创建和列出组。但是当我尝试列出组时,它抛出无法找到代理以发送列表组异常。SASL普通机制的用户(及其密码)在JAAS配置文件中配置。假设您有多个Kafka节点,则应在所有节点上保持此文件同步。可以找到一些如何配置它的示例。因此,除非您有此文件的共享存储,否则您可能需要多次修改它 你可能想考虑使用SRAM来代替普通

我在SASL_纯文本模式下使用Kafka 2.1,用于控制创建用户和组所需主题的ACL。那么,如何在运行集群中创建用户呢

我知道我可以使用
kafka consumer groups.sh
创建和列出组。但是当我尝试列出组时,它抛出
无法找到代理以发送列表组
异常。

SASL普通机制的用户(及其密码)在JAAS配置文件中配置。假设您有多个Kafka节点,则应在所有节点上保持此文件同步。可以找到一些如何配置它的示例。因此,除非您有此文件的共享存储,否则您可能需要多次修改它

<>你可能想考虑使用SRAM来代替普通的。SCRAM在Zookeeper中存储凭据(用户名及其密码的哈希值),您只需使用Kafka实用程序之一进行更改(更多详细信息,请参阅)

需要明确的是,出于ACL目的,消费者组与用户组不相关。它们用于对消费者进行分组,以便在消费者之间分配消息负载(通过定义为哪些消费者分配哪些分区),并存储最后消耗的偏移量。我不认为SASL平原机制对传统用户组有任何支持。我认为,在大多数情况下,你并没有真正创建这些组——它们是在消费者开始使用它们时创建的


消费者组与ACL关联的唯一方式是允许不同的用户使用消费者组。如果启用SimpleCalAuthorizer,则可以使用
kafka acls.sh
实用程序来管理ACL。您可以授予用户的权限之一是使用使用者组使用邮件的权限。有关ACL的更多详细信息以及如何使用
kafka ACLs.sh
工具的示例,请参见。

一个适合我的纯java解决方案:

public static void main(String[] args) throws NoSuchAlgorithmException {
    String zookeeperHost = "localhost:2181";
    int sessionTimeoutMs = 300000;
    int connectionTimeoutMs = 15000;
    boolean isSecure = false;
    int maxInFlightRequests = 10;
    Time time = Time.SYSTEM;
    String metricGroup = "myGroup";
    String metricType = "myType";
    String username = "alice";
    String password = "alice-secret";


    KafkaZkClient zkClient = KafkaZkClient.apply(zookeeperHost, isSecure, sessionTimeoutMs, connectionTimeoutMs,
      maxInFlightRequests, time, metricGroup, metricType, null, Option.apply(new ZKClientConfig()));

    AdminZkClient adminZkClient = new AdminZkClient(zkClient);

    HashMap<String, String> userProp = new HashMap<>();
    ScramCredential scramCredential = new ScramFormatter(ScramMechanism.SCRAM_SHA_256).generateCredential(password, 4096);
    userProp.put(userSecureSchema, ScramCredentialUtils.credentialToString(scramCredential));

    Properties configs = adminZkClient.fetchEntityConfig(ConfigType.User(), username);
    configs.putAll(userProp);
    adminZkClient.changeConfigs(ConfigType.User(), username, configs);
}
publicstaticvoidmain(字符串[]args)抛出NoSuchAlgorithmException{
字符串zookeeperHost=“localhost:2181”;
int sessionTimeoutMs=300000;
int connectionTimeoutMs=15000;
布尔值IsSecurity=false;
int maxInFlightRequests=10;
Time=Time.SYSTEM;
字符串metricGroup=“myGroup”;
字符串metricType=“myType”;
字符串username=“alice”;
字符串password=“alice secret”;
KafkaZkClient zkClient=KafkaZkClient.apply(zookeeperHost、isSecure、sessionTimeoutMs、connectionTimeoutMs、,
maxInFlightRequests、time、metricGroup、metricType、null、Option.apply(新的ZKClientConfig());
AdminZkClient AdminZkClient=新的AdminZkClient(zkClient);
HashMap userProp=新HashMap();
ScramCredential ScramCredential=新的ScramFormatter(ScramMechanism.SCRAM_SHA_256).GeneraterEdential(密码,4096);
userProp.put(userSecureSchema,ScramCredentialUtils.credentialostring(scramCredential));
Properties configs=adminZkClient.fetchEntityConfig(ConfigType.User(),用户名);
configs.putAll(userProp);
adminZkClient.changeConfigs(ConfigType.User(),用户名,configs);
}
您需要在卡夫卡上启用SASL_紧急停堆。
您需要org.apache.kafka:kafka_2.13:2.5.0的依赖关系

欢迎任何建议!2.11听起来像是Scala版本。卡夫卡的确切版本可能更有用(最新版本是2.1.0)。另外,您使用哪种SASL机制进行身份验证?平原SCRAM-SHA?@Jakub我更新了帖子。你说得对,卡夫卡版本是2.1.0,SASL机制是简单的。看起来这确实可行,但是什么是userSecureSchema??