我想使用Java创建一个主题。有我的密码。
String s = "--topic pt8 --create --zookeeper 10.11.6.52:2181 --replica-assignment 7";
String[] args2 = s.split(" ");
TopicCommand.main(args2);
但是有一个错误:
[ZkClient-EventThread-14-10.11.6.52:2181] INFO o.I.z.ZkEventThread-启动ZkClient事件线程。
[main] INFO o.I.z.ZkClient-等待管理员状态SyncConnected [main-EventThread] INFO o.I.z.ZkClient-动物园管理员状态已更改 (SyncConnected)
执行主题命令时出错: java.lang.ExceptionInInitializerError
[ZkClient-EventThread-14-10.11.6.52:2181] INFO o.I.z.ZkEventThread- 终止ZkClient事件线程。
--list --zookeeper 10.11.6.52:2181
可以得到结果。
--delete --zookeeper 10.11.6.52:2181 --topic pt7
获得Error while executing topic command : null
。
我的pom.xml:
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.11</artifactId>
<version>0.10.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.10.2.1</version>
</dependency>
使用管理员:
ZkClient zkClient = new ZkClient("10.11.6.52:2181", 30000, 30000, ZKStringSerializer$.MODULE$);
ZkUtils zkUtils = ZkUtils.apply(zkClient, false);
AdminUtils.createTopic(zkUtils, "pt8", 1, 1, new Properties(), RackAwareMode.Disabled$.MODULE$);
错误:
线程“主”中的异常kafka.admin.AdminOperationException:java.lang.ExceptionInInitializerError
答案 0 :(得分:0)
请使用KAFKA Admin客户端API,而不是使用shell命令并尝试从JAVA中执行该命令,它应与Kafka 0.11+一起使用。
这是一个代码段:
void setUpKafkaTopics(KafkaAdminClient kafkaAdminClient) throws ExecutionException, InterruptedException {
final Map<String, Integer> topics = new HashMap<>();
topics.put(topicName, numOfPartitions);
kafkaAdminClient.createTopics(topics, getTopicConfig(), replicationFactor);
}
Map<String, String> getTopicConfig() {
Map<String, String> topicConfiguration = new HashMap<>();
topicConfiguration.put(TopicConfig.UNCLEAN_LEADER_ELECTION_ENABLE_CONFIG,
Boolean.FALSE.toString());
topicConfiguration.put(TopicConfig.CLEANUP_POLICY_CONFIG,
TopicConfig.CLEANUP_POLICY_DELETE);
topicConfiguration.put(TopicConfig.COMPRESSION_TYPE_CONFIG,
KAFKA_TOPIC_COMPRESSION_TYPE);
topicConfiguration.put(TopicConfig.MIN_IN_SYNC_REPLICAS_CONFIG,
KAFKA_TOPIC_MIN_IN_SYNC_REPLICAS.toString());
topicConfiguration.put(TopicConfig.RETENTION_MS_CONFIG,
KAFKA_TOPIC_RETENTION_MS.toString());
return topicConfiguration;
}