apache-kafka - 基于 Kafka 主题的寻址/消费
问题描述
作为 kafka 的新手,我们想知道 kafka 是否支持我们的用例。我们正在尝试创建一个事件流,其中包含不同类型的事件,例如 Created、Updated、Deleted。
我们有两种消费者
- 需要连续消费整个流,考虑一个审计消费者。
- 只需要订阅一种事件类型的选择性消费者,例如 Created-> CreateConsumer,Updated -> UpdateConsumer。
我们的数据将是不均等的,例如我们可以将 80% 的数据作为已创建数据,将 10% 的数据作为已更新数据。
我们想知道什么是一个好的策略?基于混合数据的额外缩放要求是
运行 AuditConsumer 的 5 个实例。
运行 CreateConsumer 的 4 个实例。
运行 1 个 UpdateConsumer 实例。
解决方案
就我个人而言,我会为每种事件类型创建一个主题,并创建另一个消费者将事件流式传输到适当的频道。
以下内容稍微复杂一些,涉及更多主题,但可以让您创建一个更简化的流程。
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
。
/> created_event > CreatedConsumer
event > event_input_stream > EventSplitter -> updated_event > UpdatedConsumer
\> deleted_event > DeletedConsumer
让所有消费者从同一个主题读取的问题是,UpdateConsumer
即使它会丢弃 90% 的消息,也需要读取所有消息。这实际上意味着需要平等地扩展所有消费者,因为他们实际上将消费相同数量的消息。
推荐阅读
- javascript - 如何使用 Cheerio 获取节点的源代码位置信息?
- ios - iPhone 为较大的设备增加字体大小
- c# - 如何从 Visual Studio 中的启动项目下拉列表(启动项目候选)中删除 .Net 核心库项目?
- android - 如何将 NSD 结果放在 Android 中的 listview 适配器中
- javascript - Nodejs:将函数作为参数传递给另一个文件中的另一个函数
- python - 使用 loc 函数将行附加到数据帧的末尾
- python - 使用 Python 的 Scikit-Learn 库对文本数据进行聚类并绘图
- javascript - 获取“来自本机模块的非法回调调用。此回调类型仅允许从本机代码进行一次调用”
- reactjs - jsPDF addSvgAsImage,canvg未定义
- javascript - 更新状态后组件未重新渲染(调用了 mapStateToProps)