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