我最近升级到了Kafka 1.1.0。我正在尝试为kafka用户创建单元测试。为此,单元测试可以创建用于测试的主题是理想的。我发现一些看起来像它应该做我想要的代码。但是,当我运行它时,它将引发异常:java.lang.NoSuchMethodError:org.apache.kafka.common.utils.Utils.closeQuietly(Ljava / lang / AutoCloseable; Ljava / lang / String;)V
以下是创建主题的代码,该主题在网上找到:
@BeforeClass
public static void createTopic() {
try (final AdminClient adminClient = AdminClient.create(configure())) {
try {
// Define topic
NewTopic newTopic = new NewTopic("test-orders", 1, (short)1);
// Create topic, which is async call.
final CreateTopicsResult createTopicsResult = adminClient.createTopics(Collections.singleton(newTopic));
// Since the call is Async, Lets wait for it to complete.
createTopicsResult.values().get(ordersTopic).get();
} catch (InterruptedException | ExecutionException e) {
if (!(e.getCause() instanceof TopicExistsException)) {
throw new RuntimeException(e.getMessage(), e);
}
}
}
}
但是我运行它时会引发异常。
java.lang.NoSuchMethodError: org.apache.kafka.common.utils.Utils.closeQuietly(Ljava/lang/AutoCloseable;Ljava/lang/String;)V
at org.apache.kafka.clients.admin.KafkaAdminClient.createInternal(KafkaAdminClient.java:334)
at org.apache.kafka.clients.admin.AdminClient.create(AdminClient.java:52)
at com.sial.notifications.topics.OrdersTopicsTests.createTopic(OrdersTopicsTests.java:162)
我传递给它的唯一配置参数是引导服务器和client.id。 我究竟做错了什么?看起来很简单
答案 0 :(得分:1)
当我针对1.1.0经纪人独立运行该代码时,对我进行了稍微修改的代码:
CLLocationCoordinate2D neCoordinate = self.mapboxMapView.visibleCoordinateBounds.ne;
CLLocationCoordinate2D swCoordinate = self.mapboxMapView.visibleCoordinateBounds.sw;
由于这与您的代码非常相似,并且根据您所看到的错误,也许您还没有完全整理出对Kafka库的依赖关系?我使用了Maven工件public static void main(String[] args) {
final String ordersTopic = "test-orders";
Properties props = new Properties();
props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
try (final AdminClient adminClient = AdminClient.create(props)) {
try {
// Define topic
NewTopic newTopic = new NewTopic(ordersTopic, 1, (short)1);
// Create topic, which is async call.
final CreateTopicsResult createTopicsResult = adminClient.createTopics(Collections.singleton(newTopic));
// Since the call is Async, Lets wait for it to complete.
createTopicsResult.values().get(ordersTopic).get();
} catch (InterruptedException | ExecutionException e) {
if (!(e.getCause() instanceof TopicExistsException))
throw new RuntimeException(e.getMessage(), e);
}
}
}
。
答案 1 :(得分:0)
一种简单得多的方法是将Kafka配置为自动创建您使用的,尚不存在的任何主题
auto.create.topics.enable
设置卡夫卡。这样做,不需要 额外的代码即可创建主题。您只需使用所需的任何主题名称,Kafka就会在使用时为您创建。