首页 文章

kafka主题和分区决策

提问于
浏览
2

我需要了解一些关于kafka的事情:

  • 当我在一台主机上有一个kafka代理时 - 是否有任何意义让它有多个主题分区?我的意思是即使我的数据可以用一些密钥(比如租户ID)来区分 - 在单个kafka经纪商上做这件事有什么好处?这会给出任何并行性,如果是这样的话怎么样?

  • 使用密钥时,这是否意味着每个密钥都映射到给定的分区?主题的分区数是否必须等于我指定的密钥的可能值的数量?或者这只是一个哈希,所以分区的数量不必相等?

  • 根据我的阅读,由于要在kafka中放置的消息类型,创建了主题 . 但在我的情况下,我有2个主题,因为我有两种类型的消费:一个用于逐个阅读消息 . 第二个是大量消息进入队列(应用程序原因),然后进入第二个主题 . 虽然消息类型相同,但这是一个好的设计吗?这种扩张的任何其他做法?

1 回答

  • 3
    • 是的,即使您拥有一个Kafka代理,为某个主题创建多个分区也是有意义的 . 您可以从中受益的情况非常简单:

    • 您需要保证租户ID的按顺序处理
      每条消息的

    • 处理逻辑相当复杂,需要一些时间 . 特别是当Kafka消息本身很简单的情况,但处理此消息的逻辑需要时间(简单的例子 - 消息是一个URL,处理逻辑从那里下载文件并进行一些处理)

    鉴于这两个条件,您可能会遇到这样的情况:如果所有数据都转到单个分区,则一个消费者无法继续处理所有消息 . 请记住,您可以只使用一个消费者处理一个分区(如果使用不同的消费者群体,您可以使用2个消费者,但事实并非如此),因此随着时间的推移您将开始落后 . 但是,如果您有多个分区,您将能够使用一个消费者并并行处理数据(这可能有助于在某些情况下加快速度)或者只是添加更多消费者 .

    • 默认情况下,Kafka使用基于散列的分区 . 这可以通过提供自定义分区程序进行配置,例如,如果您不关心邮件最终的分区,则可以使用随机分区 .

    • 这完全取决于你有什么目的

    UPD,评论中的问题答案:

    • 添加更多消费者通常是为了增加更多的计算能力,而不是为了实现所需的并行性 . 要添加并行性,请添加分区 . 大多数消费者实现处理不同线程上的不同分区,因此如果您有足够的计算能力,则可能只有一个消费者并行处理多个分区 . 然后,如果您开始遇到一个消费者不够的情况,您只需添加更多消费者 .

    • 创建主题时,您只需指定分区数(以及此主题的复制因子,但这是另一回事) . 要发送的密钥和分区完全取决于 生产环境 者 . 实际上,您可以将 生产环境 者配置为使用随机分区器,它甚至不关心密钥,只需随机选择分区 . 键 - >分区之间没有直接的关系,只需设置这样的设置就可以了 .

    • 你能详细说明这个吗?我不确定我是否理解这一点,但我想你的问题是你是否只能发送一个值,而Kafka会以某种方式推断出一个密钥 . 如果是这样,那么答案是否定的 - Kafka不会对消息应用任何转换并按原样存储它们,因此如果您希望消息包含密钥,则 生产环境 者必须明确发送密钥 .

相关问题