不同类型的事件是放入同一个 Kafka Topic,还是分开放入不同 Topic?可以通过下面这几条经验法则来选择。
1、最重要的规则是,任何需要保持固定顺序的事件都必须进入相同的Topic(而且它们还必须使用相同的分区键)。最常见的情况是,如果事件与相同的实体有关,那么它们的顺序就很重要。因此,根据经验,我们可以说,关于同一实体的所有事件都需要进入同一个 Topic。
如果您正在使用 event sourcing 方法进行数据建模,那么事件的顺序是特别重要的。在这里,聚合对象的状态是通过按照特定的顺序重放事件派生的。因此,即使可能有许多不同的事件类型,定义聚合的所有事件都必须位于同一个 Topic 中。
2、当你有关于不同实体的事件时,他们是否应该在同一 Topic 或不同的 Topic?我想说的是,如果一个实体依赖于另一个实体(例如,一个地址属于一个客户),或者如果经常需要它们在一起,那么它们也可以进入相同的 Topic。另一方面,如果他们是不相关的,并且由不同的团队管理,他们最好把他们放在不同的 Topic 中。
当然,也要考虑吞吐量:如果一个实体类型的事件发生率远高于另一个实体类型,那么最好将它们分割成单独的 Topic,以避免淹没那些只想要低发生率事件的消费者(参见第4点)。但是,可以很容易地合并所有事件发生率较低的几个实体。
3、如果一个事件涉及多个实体,该怎么办?例如,购买涉及产品和客户,从一个帐户转移到另一个帐户至少涉及到这两个帐户。
我建议:最初将事件记录为单个原子消息,不要将其分解为多个 Topic 中的多个消息。最好按照接收到的方式记录事件,以尽可能原始的形式记录。您可以稍后使用流处理器对复合事件进行分割——但是如果您过早地分割原始事件,那么重构原始事件就会困难得多。更好的是,您可以给初始事件一个唯一的ID(例如UUID);这样,当您将原始事件分裂为多个事件(一个事件对应一个实体)时,您就可以将带上那个 ID,从而使每个事件的起源是可追溯的。
4、注意消费者需要订阅的 Topic 的数量。如果几个消费者都消费一组特定的 topic,这就意味着这些 topic 应该合并起来。
如果您将细粒度的 topic 合并为粗粒度的 topic,一些消费者可能会收到他们不想要的事件。这并不是什么大问题:消费 Kafka 消息的开销非常低,因此,即使消费者最终忽略了一半的事件,这种过度消费的代价可能并不大。只有当使用者需要忽略绝大多数消息(例如99.9%是不需要的)时,我才建议将低容量事件流从大容量流中分离出来。
5、Kafka Streams 状态存储(KTable)的 changelog topic 应该与所有其他 topic 分开。在这种情况下,topic 是由Kafka Streams 管理的,不应该与其他任何内容共享。
6、最后,如果上面的规则都没有告诉您是将一些事件放在同一个 topic 中还是放在不同的 topic 中呢?那么,将同一类型的事件放在同一个 topic 中,通过事件类型将它们分组。然而,我认为这条规则是最不重要的。
相关推荐
在分布式消息系统Kafka中,Topic是数据存储和消费的基本单元。Topic迁移是将一个Topic的数据从一个集群移动到另一个集群的过程,这对于扩展、备份或故障恢复等操作至关重要。本篇将详细介绍如何利用自动化脚本实现...
Flink 无法获取 Kafka Topic Metadata 异常及解决 一、问题现象 在使用 Kafka 0.11.0.1 和 Flink 1.4 进行实时计算时,Flink 无法获取 Kafka Topic Metadata,报以下异常:org.apache.kafka.common.errors....
在分布式消息系统Kafka中,Topic是数据的逻辑存储单元,它是消息的分类或主题。本文将深入探讨如何管理和操作Kafka的Topic,包括创建、查看、分区以及删除等核心概念。 **创建Topic** 在Kafka中,创建Topic通常通过...
能力申请提交成功后,自动根据标识ID创建对应Kafka的Topic。 设计思路: 1、在Java代码中调用ZooKeeper的工具类,创建Topic。 2、建立一个含有Topic属性的JavaBean,set内容到各个属性中。 3、Id的规则尚不明确,...
在本文中,我们将对比分析Apache Kafka与Apache RocketMQ在处理大量Topic时的性能表现。上一期测试主要关注了三款消息中间件(Kafka、RabbitMQ、RocketMQ)在简单消息发送场景下的性能,而本期则模拟了一个更为实际...
在本项目中,我们将深入探讨如何使用Spring Boot与Kafka进行集成,实现一个实战项目,包括Kafka的生产者、消费者以及如何创建Topic,并且特别关注指定消费分区这一高级特性。Kafka是一款高吞吐量的分布式消息系统,...
在本文中,我们将深入探讨如何在Spring Boot 2.x应用程序中整合Apache Kafka,重点是实现指定分区发送、批量消费以及指定topic分区消费的功能。Apache Kafka是一个分布式流处理平台,广泛用于构建实时数据管道和流...
java -jar kafka-topic-exporter-0.0.6-jar-with-dependencies.jar config/kafka-topic-exporter.properties 配置 启动过程时,必须将配置文件作为参数传递。 ## Kafka Exporter Properties # ...
综上所述,在星环大数据平台中使用Kafka进行消息发布与订阅涉及到多个组件和步骤,包括安装和配置TDHClient,创建和管理Kafka Topic,以及通过Kafka Console Producer和Kafka Console Consumer进行消息的发布和订阅...
标题中的“kafka的topic小工具”指的是一个用于管理和操作Kafka主题的实用程序,它提供了用户友好的界面或命令行工具,使得在Kafka集群上执行常见的管理任务变得简单。Kafka是一个分布式流处理平台,广泛应用于...
在Kafka监控中,获取指定topic的消息总量是一个关键任务,这对于了解系统的运行状态、消息处理效率以及故障排查至关重要。本文将通过一个Java示例详细解释如何实现这一功能。 首先,我们要明白Kafka是一个分布式流...
- **创建主题**: 使用 `create-topic` 命令可以快速创建一个新的 Kafka 主题,支持设置分区数、副本数等参数。 - **查看主题**: `describe-topics` 命令可以列出集群中的所有主题信息,包括分区数、副本分布等。 - *...
例如,当新的数据被写入Kafka topic时,Atlas可以通过Kafka Hook自动捕获这些变化,更新其元数据存储,提供更准确的数据血缘和生命周期管理。 在"apache-atlas-kafka-hook-2.1.0"这个子目录中,你可能会找到以下...
1、图形化界面可以直观地查看 Kafka 的 Topic 里的内容 2、自由设置 Kafka 数据展示格式 3、使用 Kafka Tool 创建/删除 Topic 4、使用 Kafka Tool 模拟发送 Messages
--add --allow-principal User:client-user --topic my-topic ``` 4. **启动与测试**: - 更新配置后,重启Kafka集群和服务。 - 使用SASL/PLAIN认证的生产者和消费者运行示例,确保能正常发送和接收消息。 在...
Kafka-Manager是一款由Yahoo开发并开源的管理工具,专门用于简化Apache Kafka集群的管理和监控。这个工具提供了直观的Web界面,使得用户可以方便地进行各种操作,包括但不限于集群状态查看、主题管理、消费者组管理...
flume从kafka读取数据,然后再sink到kafka中, ...表现为,Kafka Source可以正常从指定的Topic中读取数据,但在Kafka Sink中配置的目标Topic不起作用,数据仍然 会被写入到Source中指定的Topic中。
1、Kafka如何防止数据丢失 1)消费端弄丢数据 消费者在消费完消息之后需要执行消费位移的提交,该消费位移表示下一条需要拉取的消息的位置。Kafka默认位移提交方式是自动提交,但它不是在你每消费一次数据之后就...
Kafka 扩容方案-kafka-manager 重新分配 Topic 本文将详细介绍 Kafka 扩容方案,使用 kafka-manager 重新分配 Topic,以满足业务增长的需求。 一、扩容方案 扩容方案的目的是将 Kafka 集群扩容到新的节点,以满足...
在Kafka集群中,Topic是数据的逻辑存储单元,生产者负责发布消息到Topic,消费者则从Topic中消费这些消息。Kafkatool_64bit便是为了帮助我们更好地理解和管理这些元素。 首先,让我们来看看Kafkatool_64bit的安装...