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

用Kafka建立数据模型?主题和分区

戈嘉慕
2023-03-14

在使用新服务(如非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已查看?那隔板呢?

我怎么决定?

共有1个答案

阮星火
2023-03-14

当为Kafka构建数据时,它真的取决于它是如何被消费的。

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

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

另一方面,分区是一种并行化消息消耗的方法,代理集群中分区的总数至少需要与使用者组中使用者的数量相同,这样才能理解分区特性。使用者组中的使用者将根据分区在自己之间分担处理主题的负担,这样一个使用者将只关心“分配给”的分区中的消息

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

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

  • 建立数据模型类 通常在使用数据库之前,我们需要先建立好对应数据表的模型类。当然在sp框架里面可以简化这个步骤,直接通过自带的Model类来进行数据模型操作。 以下是两种方案: 不建立模型类,直接用Model进行操作 <?php class DbController extends BaseController { function actionIndex(){ // 直接使

  • Kafka主题分区偏移位置始终从0或随机值开始,如何确保使用者记录是分区中的第一条记录?有没有办法找出答案?如果有的话,请让我知道。谢谢。

  • 我有一个关于使用Kafka和主题(Kafka代理)和主题(Schema注册表)的不同名称设置流处理器的问题。 首先,任何操作似乎都可以与 Kafka 代理和模式注册表一起工作,但是如果处理器收到该事件,则模式注册表将魔术开始。 而不是将abc作为主题发送到模式注册表abc。bla将被发送。架构注册表的回答为“未找到”。 预期:localhost:8081/subjects/ABC/versions

  • 嗨,我正在阅读kafka主题,我想处理从kafka接收到的数据,例如tockenize,过滤掉不必要的数据,删除停用词,最后我想写回另一个kafka主题 然后我得到以下错误 线程"main"中的异常org.apache.spark.sql.Analysis Exception:具有流源的查询必须使用WriteStream.start()执行; 然后,我对代码进行了如下编辑,以从Kafka中读取并写

  • 我有自己的Spring Cloud数据流处理器,里面有Python,我使用这个示例作为指导:https://dataflow.Spring.io/docs/recipes/polyglot/processor/。然后我想缩放并创建其中的三个处理器,因此使用创建了3个Python内部的POD。我稍微修改了示例中的一段代码:当我创建一个Kafka消费者时,我也会传递一个组id,因此消息应该是负载平衡的