作为Kafka的新手,我们想知道Kafka是否支持我们的用例。我们正在尝试创建一个eventstream,其中包含不同类型的事件,例如创建、更新、删除。
我们有两种消费者
它需要连续地消耗整个流,考虑一个审计消费者。
只需要订阅一种事件类型的选择性消费者,例如created->createconsumer,updated->updateconsumer。
我们的数据将是不平等的划分,例如,我们可以有80%的数据创建和10%的数据更新。
我们想知道什么是一个好的策略?基于混合数据的额外缩放要求是
运行auditconsumer的5个示例。
运行createconsumer的4个示例。
运行updateconsumer的1个示例。
2条答案
按热度按时间ars1skjm1#
我个人会为每种事件类型创建一个主题,并创建另一个使用者来将事件流式传输到适当的通道。
下面的内容稍微复杂一点,涉及更多的主题,但可以让您创建一个更精简的流程。
CreatedEvent
/UpdatedEvent
/DeletedEvent
写在主题上event_input_stream
.AuditConsumer
消耗自event_input_stream
与消费者群体audit
.EventSplitter
消耗自event_input_stream
与消费者群体splitter
.EventSplitter
检查事件类型并生成created_event
,updated_event
,deleted_event
.CreatedConsumer
消耗自created_event
.UpdatedConsumer
消耗自updated_event
.DeletedConsumer
消耗自deleted_event
.让所有消费者阅读同一主题的问题是
UpdateConsumer
将需要读取所有邮件,即使它将丢弃90%的邮件。这实际上意味着需要平等地扩展所有的消费者,因为他们实际上将消费相同数量的消息。pn9klfpd2#
有几种策略:
您可以使用事件类型作为键来设置分区,并让使用者从每个分区消费。
在不同的主题中推送不同的事件类型。”created\u event“改为created\u topic”,“updated\u event”改为updated\u topic。
将所有事件推到一个主题中。使用kafka流来使用事件,并根据事件类型进行过滤和进一步处理。
就我个人而言,我更喜欢第三个,使用Kafka流过滤事件。关于扩展,您可以扩展到最大分区数。