虽然您可以通过Java或基于Java的语言创建主题(请参阅here),但如果不使用Java,似乎没有一种干净的方法可以做到这一点。因此,纯语言客户端API(如kafka-node
,纯JavaScript客户端)无法直接创建主题。相反,我们有两个选择:
1)使用hack,如向主题发送元数据请求 - 如果auto.create.topics.enable
设置为true
,则可以创建主题 - 但只能使用默认配置,无法控制在分区等。
2)为基于Java的客户端编写一个包装器,仅用于创建主题。最简单的方法是使用命令行参数exec
脚本bin/kafka-topics.sh
,这至少可以说是丑陋的。
有没有更好的方法呢?有一个用于Zookeeper的纯JavaScript客户端node-zookeeper-client
,如果我直接在Zookeeper中操作代理/分区信息会发生什么?
还有其他想法吗?
答案 0 :(得分:0)
您现在可以使用REST Proxy API v3来创建带有针对非Java语言的http请求的Kafka主题。
根据Confluent REST Proxy API Reference,使用REST Proxy API v3(当前可作为预览功能)来创建主题是可能的。
“ API v3可用于评估和非生产测试目的,或向Confluent提供反馈。”
下面给出了一个主题创建请求的示例,并记录在here中:
// instructions sorted by end
// need to find the "occurrence of x"
int occurence = 0;
int pos = instructions.binarySearch();
int i = pos;
while(instructions[i].end == x){
count++ ;
i++;
}
i = pos;
while(instructions[i].start <= x){
if( x <= instructions[i].end)
count++;
i++;
}
// count now has the number of occurrence of x (number of range [start, end] that contains x)
使用POST /v3/clusters/cluster-1/topics HTTP/1.1
Host: kafkaproxy.example.com
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"data": {
"attributes": {
"topic_name": "topic-1",
"partitions_count": 2,
"replication_factor": 3,
"configs": [
{
"name": "cleanup.policy",
"value": "compact"
}
]
}
}
}
:
curl
可以使用
标识 curl -X POST -H "Content-Type: application/vnd.api+json" -H "Accept: application/vnd.api+json" \
--data '{"data":{"attributes": {"topic_name": "topic-1", "partitions_count": 2, "replication_factor": 1, "configs": [{"name": "cleanup.policy","value": "compact"}]}}}' \
"http://localhost:8082/v3/clusters/<cluster-id>/topics"
的地方
cluster-id