【问题标题】:Confluent Schema Registry - maximum number of schemasConfluent Schema Registry - 最大模式数
【发布时间】:2023-02-13 15:58:01
【问题描述】:

我指的是Confluent Schema Registry

有可靠消息吗单个模式注册表可以支持多少个不同的模式

根据我对模式注册表的理解,它在启动时从 kafka 主题读取可用模式。

因此可能的限制可能是内存消耗(=一次内存中的模式数量)或性能(=从 Kafka 查找模式)。

【问题讨论】:

    标签: apache-kafka confluent-schema-registry


    【解决方案1】:

    在内部,它使用 ConcurrentHashMap 来存储该信息,因此,理论上,限制大致是支持 Java 数组的最大大小。

    Do Java arrays have a maximum size?

    但是,有多个map,因此,JVM heap constraints也会存在。如果你有更大的原始模式字符串,那么就会使用更多的内存,所以没有很好的计算。

    【讨论】:

    • 有趣的看待方式。所以基本上上限是 32 - 2 = 30 位,因为模式存储在映射中的方式以及因为 32 位整数用于存储模式 ID。对于堆内存的粗略计算,可以使用模式数乘以估计的平均大小(加上其他堆内存的一些未知因素)。
    • 模式文本经过 md5 散列和比较,因此数学将用于独特的模式,不一定是主题数量或主题之间的匹配版本
    【解决方案2】:

    我创建了自己的基准工具来查找可能的限制。 Github 存储库的链接是here

    长话短说:

    正如@OneCricketeer 所怀疑的那样,可扩展性因素是 ~ nr of schemas * size of avg schema。我创建了一个工具来查看注册表内存和 cpu 使用量如何扩展以注册许多相同大小的不同 AVRO 模式(使用模式中的自定义字段来区分它们)。 我为 ~48 个模式运行了该工具,用于 CPU 使用率低的 ~900 MB 内存。

    发现:

    • 内存使用量的上升在开始时要高很多。在初始斜坡上升之后,当分配新内存以容纳更多模式时,内存使用量会逐步增加。
    • 大部分内存用于存储 ConcurrentHashMap 中的模式(如预期)。
    • 许多模式的 CPU 使用率没有显着变化 - 检索模式的时间也没有变化。
    • 有一个缓存用于保存 RawSchema -> ParsedSchema 映射(var SCHEMA_CACHE_SIZE_CONFIG,默认 1000),但至少在我的测试中我看不到缓存未命中的负面影响,它既有命中也有未命中 ~1 -2ms 用于检索模式。

    内存使用情况(x 比例 = 100 个模式,y 比例 = 1 MB):

    CPU 使用率(x 比例 = 100 个模式,y 比例 = 使用百分比):

    Java 堆中的前 10 个对象:

     num     #instances         #bytes  class name (module)
    -------------------------------------------------------
       1:        718318       49519912  [B (java.base@11.0.17)
       2:        616621       44396712  org.apache.avro.JsonProperties$2
       3:        666225       15989400  java.lang.String (java.base@11.0.17)
       4:        660805       15859320  java.util.concurrent.ConcurrentLinkedQueue$Node (java.base@11.0.17)
       5:        616778       14802672  java.util.concurrent.ConcurrentLinkedQueue (java.base@11.0.17)
       6:        264000       12672000  org.apache.avro.Schema$Field
       7:          6680       12568952  [I (java.base@11.0.17)
       8:        368958       11806656  java.util.HashMap$Node (java.base@11.0.17)
       9:         88345        7737648  [Ljava.util.concurrent.ConcurrentHashMap$Node; (java.base@11.0.17)
      10:        197697        6326304  java.util.concurrent.ConcurrentHashMap$Node (java.base@11.0.17)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 2021-10-04
      • 2019-05-01
      • 2021-01-11
      • 2023-01-11
      • 1970-01-01
      • 2019-07-21
      相关资源
      最近更新 更多