我正在NodeJs应用程序中使用kafka-node通过loadMetadataForTopics选项创建主题。我希望我的应用程序动态地了解可用分区的数量,以便它能够在这些分区上正确地分发消息。
在单个节点Kafka实例中,方法创建主题并返回元数据,如下所示:
"step1_channelOut": {
"0": {
"topic": "step1_channelOut",
"partition": 0,
"leader": 1,
"replicas": [
1
],
"isr": [
1
]
}
},
但是,在三节点集群中,该方法会创建更多的条目:
{
"0": {
"topic": "step1_channelOut",
"partition": 0,
"leader": 3,
"replicas": [
3,
2,
1
],
"isr": [
3,
2,
1
]
},
"1": {
"topic": "step1_channelOut",
"partition": 1,
"leader": 1,
"replicas": [
1,
3,
2
],
"isr": [
1,
3,
2
]
},
"2": {
"topic": "step1_channelOut",
"partition": 2,
"leader": 2,
"replicas": [
2,
1,
3
],
"isr": [
2,
1,
3
]
},
"3": {
"topic": "step1_channelOut",
"partition": 3,
"leader": 3,
"replicas": [
3,
1,
2
],
"isr": [
3,
1,
2
]
}
}
在本例中,它创建了4个分区吗?在我看来是这样的--因为这只是最后一个案例场景(真的显式设置分区),我并不真正关心它做什么,只要它是可预测的。这就是说我控制的越多越好。
zookeeper中的主题信息与kafka服务器上的主题信息之间的关系是什么?有没有更好的方法通过NodeJS操作(创建/配置主题)kafka集群?
为什么是四个隔板?我可以理解三个,或者一个,但是四个?
kafka-node
的工作方式是根据server.properties
中的全局Kafka配置创建主题。检查的值:
num.partitions=12
default.replication.factor=1
代理的数量和分区的数量之间没有自动的关系。您可以有100个代理设置,但只需要为主题设置1个分区,也可以有1,000个分区的单个代理设置。他们没有血缘关系。
没有用于创建主题的非Java API--至少现在还没有。请看我之前未回答的问题。
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic <topic_name_here>
我在node
中使用:
const exec = require('child_process').exec;
function createTopic(topic, replFactor, numPartitions, cb) {
var zkHost = "localhost:2181";
var kafkaHome = "/usr/local/kafka";
exec(
`${kafkaHome}/bin/kafka-topics.sh --create --zookeeper ${zkHost} -- replication-factor ${replFactor} --partitions ${numPartitions} --topic ${topic}`,
(error,stderr,stdout) => cb(topic)
);
}
我开始学习Kafka用于企业解决方案。 在我阅读的过程中,我脑海中浮现出一些问题: > 当一个生产者正在生成一个消息--它会指定它想要将消息发送到的主题,是这样吗?它关心分区吗? 当订阅服务器运行时-它是否指定其组id,以便它可以是同一主题的使用者集群的一部分,或者是该组使用者感兴趣的几个主题的一部分? 每个消费者组在代理上有一个对应的分区还是每个消费者都有一个? 分区是由代理创建的,因此不是消费
关于Kafka,我有以下几个问题: > 如果我创建一个主题,并且指定的分区数多于代理数,那么单个代理将处理多个分区? 如果我创建了一个主题,并且指定的复制因子大于没有代理,那么该主题会创建还是不会创建? 一个代理可以处理不同主题的多个分区。
通过Kafka文档和各种其他资源,我了解到Kafka中的消息被组织成主题。此外,主题可以分解为多个分区,每个分区可以托管在不同的服务器上。这提供了冗余和可伸缩性。 我不确定这里的“破碎”这个词是什么意思。这是否意味着,如果添加到主题的消息是,例如“1 2 3 4 5 6 7”,那么在将其分解为分区后,我们将有一个分区仅包含整个主题的子部分。就像一个分区有“1 2 3”,而另一个分区有“4 5 6”
我正在学习Kafka,并试图为我最近的搜索应用程序创建一个主题。被推送到Kafka主题的数据被认为是一个很高的数字。 我的kafka集群有3个代理,并且已经为其他要求创建了主题。 现在,我应该为最近的搜索主题选择多少个分区?如果我没有明确提供分区号呢?选择分区号时需要考虑哪些事项?
我有一个主题T,它有4个分区TP1、TP2、TP4和TP4。 假设我有8条消息M1到M8。现在当我的制作人将这些消息发送到主题T时,在以下场景下,Kafka经纪人将如何接收它们: 场景1:只有一个kafka broker实例具有前面提到的分区的主题T。 现在假设kafka broker实例1宕机,消费者会作何反应?我假设我的使用者正在读取broker实例1。
Kafka主题分区偏移位置始终从0或随机值开始,如何确保使用者记录是分区中的第一条记录?有没有办法找出答案?如果有的话,请让我知道。谢谢。