开发者社区> 问答> 正文

关于mq分发到topic和partition规则的建议

目前想法是一个instance对应mysql中一个database 1目前只能将一个instance配置为一个topic,其可以配置为一个kafka partition或根据 hash[库名.表名.id]到多个kafka partition

2在某些场景下,如:实时计算某个表中的数据,如果只有一个partition,则会在拉取数据时拉取到大量的其他表的binlog数据;或者根据 hash[库名.表名]分区时,对应的kafka消费者不清楚表的消息到底发送到了那个分区里面, 这种情况也存在预设分区数满了,导致多个表数据进入一个分区的情况;也会出现大量分区空置的情况.

3如果将一个表作为一个instance......那么维护起来非常麻烦

能不能考虑一下可以做成根据数据库中的表生成topic,可选根据主键进行自定义分区数量限制呢

原提问者GitHub用户RickJou

展开
收起
Java工程师 2023-05-08 17:42:03 102 0
2 条回答
写回答
取消 提交回答
  • 最新分支已经支持了

    原回答者GitHub用户agapple

    2023-05-09 18:40:40
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    针对你的问题,我有以下几个建议:

    考虑根据数据库中的表生成topic,并根据自定义的规则对topic进行分区。这样可以更方便地管理和监控不同的表对应的消息。

    可以考虑使用基于消息内容的分区策略,根据消息内容的特定字段(比如消息中的某个关键字)进行分区,提高消息的负载均衡效果。

    考虑使用Kafka的动态分区功能,根据实际的负载情况动态调整分区数,减少消息发送和消费的负载不均衡问题。

    对于某些需要实时计算某个表中的数据的场景,可以单独建立一个分区,将这些表的消息发送到这个分区中,以避免数据混乱的问题。

    总的来说,建议根据实际业务需求和情况,灵活地选择和组合不同的分区策略,以达到最优的消息处理效果。同时,需要注意在分区策略设计和配置时,考虑到Kafka的可用资源和负载情况,以避免过度分区造成资源浪费和性能下降。

    2023-05-08 17:45:34
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
RocketMQ Client-GO 介绍 立即下载
RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载
基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载