首页 > 解决方案 > 基于 Kafka 主题的寻址/消费

问题描述

作为 kafka 的新手,我们想知道 kafka 是否支持我们的用例。我们正在尝试创建一个事件流,其中包含不同类型的事件,例如 Created、Updated、Deleted。

我们有两种消费者

  1. 需要连续消费整个流,考虑一个审计消费者。
  2. 只需要订阅一种事件类型的选择性消费者,例如 Created-> CreateConsumer,Updated -> UpdateConsumer。

我们的数据将是不均等的,例如我们可以将 80% 的数据作为已创建数据,将 10% 的数据作为已更新数据。

我们想知道什么是一个好的策略?基于混合数据的额外缩放要求是

运行 AuditConsumer 的 5 个实例。

运行 CreateConsumer 的 4 个实例。

运行 1 个 UpdateConsumer 实例。

标签: apache-kafka

解决方案


就我个人而言,我会为每种事件类型创建一个主题,并创建另一个消费者将事件流式传输到适当的频道。

以下内容稍微复杂一些,涉及更多主题,但可以让您创建一个更简化的流程。

CreatedEvent//写入主题UpdatedEventDeletedEventevent_input_stream

AuditConsumerevent_input_stream消费组消费audit

EventSplitterevent_input_stream消费组消费splitterEventSplitter检查事件类型并生成created_event, updated_event, deleted_event.之一

CreatedConsumer从 消耗created_event

UpdatedConsumer从 消耗updated_event

DeletedConsumer从 消耗deleted_event

                                           /> created_event > CreatedConsumer
event > event_input_stream > EventSplitter -> updated_event > UpdatedConsumer
                                           \> deleted_event > DeletedConsumer

让所有消费者从同一个主题读取的问题是,UpdateConsumer即使它会丢弃 90% 的消息,也需要读取所有消息。这实际上意味着需要平等地扩展所有消费者,因为他们实际上将消费相同数量的消息。


推荐阅读