使用Java为ApacheKafka 0.9创建主题

使用Java为ApacheKafka 0.9创建主题,java,apache-kafka,Java,Apache Kafka,我正在为一个客户端编程,以便与kafka 0.9一起工作。我想知道如何创建一个主题。这个答案:与我所问的相似。除此之外,该解决方案仅适用于卡夫卡0.8.2,它与卡夫卡0.9的API有很大不同 在浏览了scala api和各种在线链接之后 这就是我找到的解决方案: Maven依赖项: <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.11</

我正在为一个客户端编程,以便与kafka 0.9一起工作。我想知道如何创建一个主题。这个答案:与我所问的相似。除此之外,该解决方案仅适用于卡夫卡0.8.2,它与卡夫卡0.9的API有很大不同

在浏览了scala api和各种在线链接之后

这就是我找到的解决方案:

Maven依赖项:

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka_2.11</artifactId>
    <version>0.9.0.0</version>
</dependency>
<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.7</version>
</dependency>
如果您想知道为什么下面的代码看起来不像Java:

ZKStringSerializer$.MODULE$
这是因为ZkStringSerializer是一个Scala对象。 您可以在此处阅读更多相关信息:

注意:必须使用ZKStringSerializer初始化ZkClient。
如果不这样做,则createTopic()似乎只能工作 (换句话说:它将返回而不出错)。
该主题将仅存在于Zookeeper中,并且仅在列出主题时有效。 i、 e.下面的列表命令可以正常工作

bin/kafka-topics.sh --list --zookeeper localhost:2181
但卡夫卡本身并没有创造这个话题。 为了举例说明,下面的descripe命令将抛出一个错误

bin/kafka-topics.sh --describe --zookeeper localhost:2181
因此,请确保使用ZKStringSerializer$.MODULE$对其进行初始化

参考资料: ‌​从ide使用api

孙志龙,
我很快追随Chee Loong的回答,卡夫卡的回答是0.90.1,但必须作出改变。ZKStringSerializer现在是私有的。为了创建ZkUtils,我使用了以下API(它在内部创建了一个ZkUtils客户端):


对于Kafka 0.9及更高版本,您需要使用新的API AdminZkClient。AdminUtils API已被弃用

String zookeeperHost = "127.0.0.1:2181";
Boolean isSucre = false;
int sessionTimeoutMs = 200000;
int connectionTimeoutMs = 15000;
int maxInFlightRequests = 10;
Time time = Time.SYSTEM;
String metricGroup = "myGroup";
String metricType = "myType";
KafkaZkClient zkClient = KafkaZkClient.apply(zookeeperHost,isSucre,sessionTimeoutMs,
                connectionTimeoutMs,maxInFlightRequests,time,metricGroup,metricType);

AdminZkClient adminZkClient = new AdminZkClient(zkClient);

String topicName1 = "myTopic";
int partitions = 3;
int replication = 1;
Properties topicConfig = new Properties();

adminZkClient.createTopic(topicName1,partitions,replication,
            topicConfig,RackAwareMode.Disabled$.MODULE$);

您可以查看更多详细信息

换句话说,您尝试了类似的解决方案,但不起作用,是吗?请描述一下你的尝试和遇到的问题。我在一家公司工作。它运行卡夫卡0.8.2。我基于链接实现了它。现在公司想升级到卡夫卡0.9。我需要一个快速的解决方案来升级我的代码到0.9。原始的链接引用不是@JayaAnanthram修复的,谢谢。我不知道原来的链接参考。
ZkUtils.apply(
    "zookeeper1:port1,zookeeper2:port2",
    sessionTimeoutMs,
    connectionTimeoutMs,
    false)
String zookeeperHost = "127.0.0.1:2181";
Boolean isSucre = false;
int sessionTimeoutMs = 200000;
int connectionTimeoutMs = 15000;
int maxInFlightRequests = 10;
Time time = Time.SYSTEM;
String metricGroup = "myGroup";
String metricType = "myType";
KafkaZkClient zkClient = KafkaZkClient.apply(zookeeperHost,isSucre,sessionTimeoutMs,
                connectionTimeoutMs,maxInFlightRequests,time,metricGroup,metricType);

AdminZkClient adminZkClient = new AdminZkClient(zkClient);

String topicName1 = "myTopic";
int partitions = 3;
int replication = 1;
Properties topicConfig = new Properties();

adminZkClient.createTopic(topicName1,partitions,replication,
            topicConfig,RackAwareMode.Disabled$.MODULE$);