Kafka基于主题的寻址/消费

时间:2019-07-05 12:51:36

标签: apache-kafka

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

我们有两种消费者

  1. 需要连续消耗整个数据流的情况,请考虑使用审计使用者。
  2. 仅需要订阅一种事件类型的选择性使用者,例如Created-> CreateConsumer,Updated-> UpdateConsumer。

我们的数据将被不平等地分割,例如我们可以将80%的数据作为“已创建”,并将10%的数据作为“已更新”。

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

运行5个AuditConsumer实例。

运行4个CreateConsumer实例。

运行1个UpdateConsumer实例。

2 个答案:

答案 0 :(得分:1)

我个人将为每种事件类型创建一个主题,并创建另一个使用者以将事件流式传输到适当的频道。

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

CreatedEvent / UpdatedEvent / DeletedEvent写入主题event_input_stream

AuditConsumerevent_input_stream中与消费者组audit一起消费。

EventSplitterevent_input_stream的消费者组splitter中消费。 EventSplitter检查事件类型并产生created_eventupdated_eventdeleted_event中的一个。

CreatedConsumercreated_event中消费。

UpdatedConsumerupdated_event中消费。

DeletedConsumerdeleted_event中消费。

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

让所有消费者都从同一个主题中进行阅读的问题在于,UpdateConsumer将需要阅读所有消息,即使它将丢弃其中的90%。这实际上意味着需要平等地缩放所有使用者,因为他们实际上将消耗相同数量的消息。

答案 1 :(得分:1)

可以有几种策略:

  1. 您可以将事件类型用作键,以设置分区并让使用者从每个分区中使用。
  2. 在不同主题中推送不同的事件类型。 从“ created_event”到“ created_topic”,从“ updated_event”到“ updated_topic”。
  3. 将所有事件归为一个主题。使用Kafka流来消耗事件并根据事件类型进行过滤并进行进一步处理。

就个人而言,我更喜欢第3个,使用kafka流过滤事件。 关于扩展,您可以扩展到最大分区数。