Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[RIP-66] Support KV(Rocksdb) Storage #7064

Closed
1 task done
fujian-zfj opened this issue Jul 23, 2023 · 1 comment · Fixed by #7092 or #7120
Closed
1 task done

[RIP-66] Support KV(Rocksdb) Storage #7064

fujian-zfj opened this issue Jul 23, 2023 · 1 comment · Fixed by #7092 or #7120

Comments

@fujian-zfj
Copy link
Contributor

Before Creating the Enhancement Request

  • I have confirmed that this should be classified as an enhancement rather than a bug/feature.

Summary

We will introduce kv(rocksdb) storage to solve the possible Full GC caused by large object memory allocation when metadata such as topic is serialized, and the performance degradation caused by random writing of a large number of small ConsumeQueue files in a million-topic scenario

Motivation

we have encountered and been plagued by some probelms in the actual production environment. In some actual production scenarios, millions of topics and subsriptions will be created, and both of them may be deleted and created frequently. In current architecture, both topics and subcriptions are persisted in real time, which means each request of topics and subsciptions updating will trigger the persist interface, and the persistence of such metadata is written in full rather than append-only.

In the scenario of millions of topics, frequent persistence generates the large memory object jsonString of the topicConfigTable. When the memory is tight, the large memory object jsonString will be directly allocated to the old generation, resulting in frequent Full GC.

In addition, millions of topics will inevitably bring millions of indexed ConsumeQueue small files, a large number of indexed small files will destroy the advantages of rocketmq sequential writing, and the random writing of ConsumeQueue will make the performance drop sharply.

Describe the Solution You'd Like

This proposal mainly optimizes and solves the existing perfermance problems in the million-topic scenario from two levels:

  1. Metadata like topic, subscription, consumerOffset implement kv storage
  2. ConsumeQueue index file implements kv storage

Describe Alternatives You've Considered

no

Additional Context

No response

@fujian-zfj fujian-zfj changed the title [Enhancement] Enhancement title [Enhancement] [RIP-66] Support KV(Rocksdb) Storage Jul 23, 2023
@RongtongJin RongtongJin changed the title [Enhancement] [RIP-66] Support KV(Rocksdb) Storage [RIP-66] Support KV(Rocksdb) Storage Jul 23, 2023
RongtongJin pushed a commit that referenced this issue Aug 4, 2023
)

* typo int readme[ecosystem]

* rocksdb metadata

* add unit test

* fix testOffsetPersistInMemory

* fix unit test

* fix unit test

* remove unused import

* move RocksDBOffsetSerialize to broker moudle

* Fix bazel build scripts

Signed-off-by: Li Zhanhui <[email protected]>

* Flag QueryMsgByKeyIT as flaky as it fails at frequency: 5 out of 32

Signed-off-by: Li Zhanhui <[email protected]>

* change public to private of some inner method

---------

Signed-off-by: Li Zhanhui <[email protected]>
Co-authored-by: Li Zhanhui <[email protected]>
RongtongJin added a commit that referenced this issue Oct 14, 2023
…#7120)

* typo int readme[ecosystem]

* consumequue support rocksdb

* fix rocksdb test

* fix rocksdb test

* remove unused method

* split into two tables

* CqUnit in Rocksdb [phyOffset, bodySize, tagHashCode, msgStoreTime]

* fix build.baze in tieredMessageStore

* skip RocksDBMessageStoreTest bazel

* skip RocksDBMessageStoreTest bazel

* Rocksdb TimerMessageStore

* fix unit test bazel

* fix store build.bazel

* fix store build.bazel

* optimize

* optimize

* polish

* build bytebuffer pair inner

* remove unused code

* DataConverter.CHARSET_UTF8

* fix comment

* fix comment

* rebuild test

* rebuild test

* optimize

* rebuild test

* polish

* polish

* rebuild test

* merge develop

* rebuild test

* rebuild test

* fix getConsumeQueue not find cq

* fix test

* rocksdb new version

* rebuild test

* fix bug

* Resolve conflicts after merging develop

* fix updateCqOffset

* fix recoverAbnormally

* fix recoverAbnormally

* polish

* polish

* polish

* remove exception in cleanunusedTopic

* remove exception in cleanunusedTopic

* remove exception in cleanunusedTopic

---------

Co-authored-by: RongtongJin <[email protected]>
zhiliatom added a commit to zhiliatom/rocketmq-zzl that referenced this issue Dec 8, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment