小编典典

使用 Kafka 进行数据建模?主题和分区

all

在使用新服务(例如非 RDBMS 数据存储或消息队列)时,我首先想到的事情之一是:“我应该如何构建我的数据?”。

我已经阅读并观看了一些介绍性材料。特别是,以Kafka:一个用于日志处理的分布式消息传递系统为例,它写道:

  • “主题是与消息关联的容器”
  • “并行度的最小单位是主题的分区。这意味着......属于某个主题的特定分区的所有消息都将被消费者组中的消费者消费。”

知道了这一点,什么是说明如何使用主题和分区的好例子?什么时候应该成为话题?什么时候应该是一个分区?

例如,假设我的 (Clojure) 数据如下所示:

{:user-id 101 :viewed "/page1.html" :at #inst "2013-04-12T23:20:50.22Z"}
{:user-id 102 :viewed "/page2.html" :at #inst "2013-04-12T23:20:55.50Z"}

主题应该基于user-id? viewed? at? 分区呢?

我该如何决定?


阅读 142

收藏
2022-08-05

共1个答案

小编典典

在为 Kafka 构建数据时,实际上取决于它的使用方式。

在我看来,主题是一组相似类型的消息,将被相同类型的消费者消费,所以在上面的例子中,我只有一个主题,如果你决定推送其他类型的通过 Kafka
获取数据,您可以稍后为其添加新主题。

主题在 ZooKeeper 中注册,这意味着如果尝试添加太多主题,您可能会遇到问题,例如,您拥有一百万用户并决定为每个用户创建一个主题。

另一方面,分区是一种并行处理消息的方式。 代理集群中的分区总数需要至少与消费者组中的消费者数量相同,才能理解分区功能。
消费者组中的消费者将根据分区在他们之间分担处理主题的负担,这样一个消费者将只关心分区本身“分配给”的消息。

可以使用生产者端的分区键显式设置分区,或者如果未提供,将为每条消息选择一个随机分区。

2022-08-05