在使用新服务(如非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
?已查看
?在
?那隔板呢?
我怎么决定?
当为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,因此消息应该是负载平衡的