当前位置: 首页 > 知识库问答 >
问题:

Kafka:分区数多于代理数

秦琦
2023-03-14

关于Kafka,我有以下几个问题:

>

  • 如果我创建一个主题,并且指定的分区数多于代理数,那么单个代理将处理多个分区?

    如果我创建了一个主题,并且指定的复制因子大于没有代理,那么该主题会创建还是不会创建?

    一个代理可以处理不同主题的多个分区。

  • 共有1个答案

    黄宏毅
    2023-03-14
    1. 这是正确的。如果您的分区比可用的代理多,那么您的一些代理将为每个主题存储多个分区。例如,让我们假设您有一个活动代理和一个带有两个分区的主题;您的代理将如下所示:
        +-------------------+
        |      Topic X      |
        |    Partition 0    |
        |                   |
        |                   |
        |     Topic X       |
        |   Partition 1     |
        +-------------------+
    
    >> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic myTestTopic
    
    Error while executing topic command replication factor: 3 larger than available
    brokers: 1
    kafka.admin.AdminOperationException: replication factor: 3 larger than available
     brokers: 1
            at kafka.admin.AdminUtils$.assignReplicasToBrokers(AdminUtils.scala:70)
            at kafka.admin.AdminUtils$.createTopic(AdminUtils.scala:171)
            at kafka.admin.TopicCommand$.createTopic(TopicCommand.scala:93)
            at kafka.admin.TopicCommand$.main(TopicCommand.scala:55)
            at kafka.admin.TopicCommand.main(TopicCommand.scala)
    
        +-------------------+
        |      Topic 1      |
        |    Partition 0    |
        |                   |
        |                   |
        |     Topic 3       |
        |   Partition 1     |
        |                   |
        |                   |
        |     Topic 2       |
        |   Partition 1     |
        +-------------------+
    
    
        +-------------------+
        |      Topic 1      |
        |    Partition 1    |
        |                   |
        |                   |
        |     Topic 3       |
        |   Partition 0     |
        |                   |
        |                   |
        |     Topic 2       |
        |   Partition 0     |
        +-------------------+
    
     类似资料:
    • 我正在NodeJs应用程序中使用kafka-node通过loadMetadataForTopics选项创建主题。我希望我的应用程序动态地了解可用分区的数量,以便它能够在这些分区上正确地分发消息。 在单个节点Kafka实例中,方法创建主题并返回元数据,如下所示: 但是,在三节点集群中,该方法会创建更多的条目: 在本例中,它创建了4个分区吗?在我看来是这样的--因为这只是最后一个案例场景(真的显式设置

    • 我正在学习Kafka,并试图为我最近的搜索应用程序创建一个主题。被推送到Kafka主题的数据被认为是一个很高的数字。 我的kafka集群有3个代理,并且已经为其他要求创建了主题。 现在,我应该为最近的搜索主题选择多少个分区?如果我没有明确提供分区号呢?选择分区号时需要考虑哪些事项?

    • 我有一个无效的经纪人,它并不真的存在。我错误地启动了一个id无效的服务器。 但其中一个主题以前分配给了这个代理:

    • 当我们基于某个键在流上应用组 by 函数时,kafka 如何计算这一点,因为相同的键可能存在于不同的分区中?我看到了()函数,它基本上对数据进行了重新分区,但我不明白它是什么意思。它会将具有相同键的所有消息移动到单个分区中吗?另外,我们可以通过()方法调用的频率如何?如果有要求,我们可以在收到每条消息后调用它吗?请建议。谢谢

    • 通过Kafka文档和各种其他资源,我了解到Kafka中的消息被组织成主题。此外,主题可以分解为多个分区,每个分区可以托管在不同的服务器上。这提供了冗余和可伸缩性。 我不确定这里的“破碎”这个词是什么意思。这是否意味着,如果添加到主题的消息是,例如“1 2 3 4 5 6 7”,那么在将其分解为分区后,我们将有一个分区仅包含整个主题的子部分。就像一个分区有“1 2 3”,而另一个分区有“4 5 6”

    • 问题内容: 我试图编写代码来解决标准的整数分区问题(Wikipedia)。我写的代码一团糟。我需要一个优雅的解决方案来解决该问题,因为我想改善自己的编码风格。这不是一个作业问题。 问题答案: 虽然这个答案很好,但我还是建议以下skovorodkin的答案: 如果要所有排列(即(1,3)和(3,1))更改为