Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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 Kafka 0.8,是否可以使用java代码创建带有分区和复制的主题?_Apache Kafka - Fatal编程技术网

Apache kafka Kafka 0.8,是否可以使用java代码创建带有分区和复制的主题?

Apache kafka Kafka 0.8,是否可以使用java代码创建带有分区和复制的主题?,apache-kafka,Apache Kafka,在Kafka 0.8beta中,可以使用如下所述的命令创建主题 上面的命令将创建一个名为“test”的主题,每个分区有3个分区和2个副本 我可以用Java做同样的事情吗 到目前为止,我发现使用Java我们可以创建一个生产者,如下所示 Producer<String, String> producer = new Producer<String, String>(config); producer.send(new KeyedMessage<Strin

在Kafka 0.8beta中,可以使用如下所述的命令创建主题

上面的命令将创建一个名为“test”的主题,每个分区有3个分区和2个副本

我可以用Java做同样的事情吗

到目前为止,我发现使用Java我们可以创建一个生产者,如下所示

    Producer<String, String> producer = new Producer<String, String>(config);
    producer.send(new KeyedMessage<String, String>("mytopic", msg));
Producer-Producer=新的Producer(配置);
send(新的KeyedMessage(“mytopic”,msg));
这将创建一个名为“mytopic”的主题,使用“num.partitions”属性指定的分区数并开始生成

但是有没有一种方法可以定义分区和复制呢?我找不到这样的例子。如果我们不能,那么这是否意味着我们总是需要在创建主题之前使用分区和复制(根据我们的要求),然后使用生产者在该主题内生成消息。例如,如果我想以相同的方式创建“mytopic”,但分区数不同(覆盖num.partitions属性),是否有可能?

注意:我的答案涉及Kafka 0.8.1+,即2014年4月可用的最新稳定版本

是的,您可以通过Kafka API以编程方式创建主题。是的,您可以为主题指定所需的分区数以及复制因子

请注意,最近发布的Kafka 0.8.1+提供的API与Kafka 0.8.0略有不同(Biks在其链接回复中使用了该API)。我在回答Biks上面提到的问题时加了一句话。

`

import kafka.admin.AdminUtils;
import kafka.cluster.Broker;
import kafka.utils.ZKStringSerializer$;
import kafka.utils.ZkUtils;

String zkConnect = "localhost:2181";
ZkClient zkClient = new ZkClient(zkConnect, 10 * 1000, 8 * 1000, ZKStringSerializer$.MODULE$);
ZkUtils zkUtils = new ZkUtils(zkClient, new ZkConnection(zkConnect), false);
    Properties pop = new Properties();
    AdminUtils.createTopic(zkUtils, topic.getTopicName(), topic.getPartitionCount(), topic.getReplicationFactor(),
            pop);
    zkClient.close();`

到目前为止,我发现使用
kafka.javaapi.producer.producer
API可以创建一个主题,但是分区的数量将基于配置文件中提到的
num.partitions
属性。要使用自定义分区创建主题,我认为唯一的方法是使用上面提到的控制台脚本。在这种情况下,必须先创建主题,然后制作人才能开始制作。如果您需要任何进一步的帮助或代码片段,我已经在下面提到的链接中回答了相同的问题。让我知道我将与maven Dependency共享代码此示例在Java中不起作用,或者至少我不知道如何使其编译。您是对的--示例代码在Scala中。不幸的是,您不能将其复制粘贴到Java代码中。
import kafka.admin.AdminUtils;
import kafka.cluster.Broker;
import kafka.utils.ZKStringSerializer$;
import kafka.utils.ZkUtils;

String zkConnect = "localhost:2181";
ZkClient zkClient = new ZkClient(zkConnect, 10 * 1000, 8 * 1000, ZKStringSerializer$.MODULE$);
ZkUtils zkUtils = new ZkUtils(zkClient, new ZkConnection(zkConnect), false);
    Properties pop = new Properties();
    AdminUtils.createTopic(zkUtils, topic.getTopicName(), topic.getPartitionCount(), topic.getReplicationFactor(),
            pop);
    zkClient.close();`