【问题标题】:Kafka subject based addressing/consumption基于 Kafka 主题的寻址/消费
【发布时间】:2019-07-05 21:15:36
【问题描述】:

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

我们有两种消费者

  1. 如果需要持续消费整个流,请考虑使用 Audit 消费者。
  2. 选择性消费者,只需要订阅一种事件类型,例如 Created-> CreateConsumer,Updated -> UpdateConsumer。

我们的数据将不均等,例如我们可以将 80% 的数据设为 Created,将 10% 的数据设为 Updated。

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

运行 5 个 AuditConsumer 实例。

运行 4 个 CreateConsumer 实例。

运行 1 个 UpdateConsumer 实例。

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

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

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

    CreatedEvent/UpdatedEvent/DeletedEvent 被写入主题event_input_stream

    AuditConsumerevent_input_stream 消费,消费组audit

    EventSplitterevent_input_stream 消费,消费组splitterEventSplitter 检查事件类型并生成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%。这实际上意味着需要平等地扩展所有消费者,因为他们实际上将消费相同数量的消息。

    【讨论】:

      【解决方案2】:

      可以有几种策略:

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

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

      【讨论】:

      • 是的,一样。
      猜你喜欢
      • 2017-11-24
      • 1970-01-01
      • 2020-10-08
      • 2017-10-17
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 1970-01-01
      相关资源
      最近更新 更多