开发者社区> 问答> 正文

rocketmq分区键支持正则?

比如mysql用了分库,从db1-db9,数据分发到rocketmq多个分区,然后我mq.yml是不是要这么设置 partitionHash: db1.table: pk db2.table: pk ...... 从代码看目前是不支持正则的 能否支持正则,比如 partitionHash: regex: db[1-9].table.pk

这么配置,插入1000条数据,16个分区每个分区都有1000个,不应该是1000个分发在这16个分区? - canalDestination: db1 topic: canal

partition: 1

对应topic分区数量

partitionsNum: 16 partitionHash:

库名.表名: 唯一主键

原提问者GitHub用户xesygao

展开
收起
Java工程师 2023-05-08 17:56:30 124 0
2 条回答
写回答
取消 提交回答
  • 最新代码已修复

    原回答者GitHub用户agapple

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

    目前RocketMQ并不支持在分区键中使用正则表达式。在Canal中,分区键的配置是通过一个Map对象来完成的,Map中的key是由"库名.表名"组成的字符串,value是唯一主键的字段名,例如:

    partitionHash: db1.table1: id db2.table2: id 这样配置的含义是,对于db1中的table1和db2中的table2这两张表,将根据它们的id字段的值来进行分区。具体的分区算法是根据id值进行hash计算,然后将结果对分区总数取模,最终得到该条数据所属的分区编号。

    如果要对多个库中的相同表使用相同的分区键,可以使用通配符"*",例如:

    partitionHash: db1.: id db2.: id 这样配置的含义是,对于db1和db2中的所有表,都将根据它们的id字段的值来进行分区。如果要使用不同的分区键,可以分别配置不同的key值,例如:

    partitionHash: db1.table1: id db2.table2: name 这样配置的含义是,对于db1中的table1和db2中的table2这两张表,分别根据它们的id和name字段的值进行分区。

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

相关电子书

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