kafka java创建topic_如何通过Java在Kafka中创建主题

本文介绍了如何在Kafka中通过Java创建主题。针对不同版本的Kafka,提供了两种方法:一种适用于API 0.11.0+,另一种适用于更早的版本,涉及ZkClient和AdminUtils的使用。文章还包含了示例代码和配置说明。
摘要由CSDN通过智能技术生成

小编典典

编辑 -较新版本的Kafka不需要Zookeeper。请参阅@Neeleshkumar Srinivasan Mannur的API版本1.01.0以上的答案

API 0.11.0+中的过程似乎已大大简化。使用它,可以完成以下操作

import org.apache.kafka.clients.admin.AdminClient;

import org.apache.kafka.clients.admin.CreateTopicsResult;

import org.apache.kafka.clients.admin.NewTopic;

Properties properties = new Properties();

properties.load(new FileReader(new File("kafka.properties")));

AdminClient adminClient = AdminClient.create(properties);

NewTopic newTopic = new NewTopic("topicName", 1, (short)1); //new NewTopic(topicName, numPartitions, replicationFactor)

List newTopics = new ArrayList();

newTopics.add(newTopic);

adminClient.createTopics(newTopics);

adminClient.close();

kafka.properties文件的内容如下

bootstrap.servers=localhost:9092

group.id=test

enable.auto.commit=true

auto.commit.interval.ms=1000

key.deserializer=org.apache.kafka.common.serialization.StringDeserializer

value.deserializer=org.apache.kafka.common.serialization.StringDeserializer

请注意,必须关闭AdminClient的实例才能反映新创建的主题。

原始答案

我修好了..经过长时间的研究..

ZkClient zkClient = new ZkClient("localhost:2181", 10000, 10000);

AdminUtils.createTopic(zkClient, myTopic, 10, 1, new Properties());

通过上面的代码,ZkClient将创建一个主题,但是该主题信息将不了解kafka。所以我们要做的是,我们需要通过以下方式为ZkClient创建对象,

首先导入以下语句,

import kafka.utils.ZKStringSerializer$;

并通过以下方式为ZkClient创建对象,

ZkClient zkClient = new ZkClient("localhost:2181", 10000, 10000, ZKStringSerializer$.MODULE$);

AdminUtils.createTopic(zkClient, myTopic, 10, 1, new Properties());

编辑1:(对于@ajkret评论)

由于api已更改,因此上述代码不适用于kafka> 0.9,请使用以下代码适用于kafka> 0.9

import java.util.Properties;

import kafka.admin.AdminUtils;

import kafka.utils.ZKStringSerializer$;

import kafka.utils.ZkUtils;

import org.I0Itec.zkclient.ZkClient;

import org.I0Itec.zkclient.ZkConnection;

public class KafkaTopicCreationInJava

{

public static void main(String[] args) throws Exception {

ZkClient zkClient = null;

ZkUtils zkUtils = null;

try {

String zookeeperHosts = "192.168.20.1:2181"; // If multiple zookeeper then -> String zookeeperHosts = "192.168.20.1:2181,192.168.20.2:2181";

int sessionTimeOutInMs = 15 * 1000; // 15 secs

int connectionTimeOutInMs = 10 * 1000; // 10 secs

zkClient = new ZkClient(zookeeperHosts, sessionTimeOutInMs, connectionTimeOutInMs, ZKStringSerializer$.MODULE$);

zkUtils = new ZkUtils(zkClient, new ZkConnection(zookeeperHosts), false);

String topicName = "testTopic";

int noOfPartitions = 2;

int noOfReplication = 3;

Properties topicConfiguration = new Properties();

AdminUtils.createTopic(zkUtils, topicName, noOfPartitions, noOfReplication, topicConfiguration);

} catch (Exception ex) {

ex.printStackTrace();

} finally {

if (zkClient != null) {

zkClient.close();

}

}

}

}

2020-09-08

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值