我试图在学术项目中升级Kafka,并发现这个类在0.8中被Kafka 2.1弃用
我正在寻求帮助。
ZKUtils被弃用的地方。
synchronized public void createTopicInZk (HETopic heTopic, int numPartitions, int replicationFactor)
{
ZkClient zkClient = getNewZkClient();
try {
AdminUtils.createTopic(zkClient,
heTopic.getCompositeTopic(),
numPartitions,
replicationFactor,
new Properties()
);
} finally {
if (zkClient != null) zkClient.close();
}
}
然后我看到错误,比如期待ZkUtil而不是ZKClient(AdminUtils.createTopic的第一个参数)
所以改成了代码
synchronized public void createTopicInZk (HETopic heTopic, int numPartitions, int replicationFactor)
{
ZkClient zkClient = getNewZkClient();
**ZkUtils zkUtils = ZkUtils.apply(zkClient, false);**
try {
AdminUtils.createTopic(zkUtils,
heTopic.getCompositeTopic(),
numPartitions,
replicationFactor,
new Properties()
);
} finally {
if (zkClient != null) zkClient.close();
}
}
此解决方案有效但我在运行时收到ZkUtils已弃用的警告消息。 ZKUtils的新替代品是什么?
你不应该使用AdminUtils
或ZkUtils
类。这些是内部类,而不是public APIs的一部分。使用内部类会使您面临这样的情况,即由于某些Kafka内部更改而导致代码中断。
但是我理解,使用Kafka 0.9时,没有支持此功能的公共API。然而事实并非如此!
现在您应该使用AdminClient API创建主题,请参阅createTopics()