Expand description
Topic-backed RemoteLogMetadataManager for Crabka, part of
the KIP-405 tiered-storage stack.
This crate ships TopicBasedRemoteLogMetadataManager, the
production replacement for crabka_remote_storage::InmemoryRemoteLogMetadataManager.
Remote-segment lifecycle events (add / update / partition-delete)
are appended to an event log — in production the
__remote_log_metadata Kafka topic — and every broker’s local
cache is rebuilt by consuming the same log. After a restart, a
broker re-reads the topic from offset 0 and re-applies the full
history to recover its cache.
§What this crate provides
TopicBasedRemoteLogMetadataManager— theRemoteLogMetadataManagerimplementation.MetadataEventLog— the publish/subscribe seam between the manager and the underlying durable transport.InProcessMetadataEventLog— an in-memory fixture for unit tests and for modelling the multi-broker case without bringing up a real cluster (multiple managers cloned from the sameArcobserve each other’s writes).MetadataEvent+ theserdemodule — the on-wire binary codec for the three event variants.metadata_partition_for— theTopicIdPartition → metadata-topic-partitionhash.KafkaMetadataEventLog— the productionMetadataEventLogadapter that wires the trait tocrabka_client_producer/crabka_client_core/crabka_client_admin, persisting events in the__remote_log_metadatatopic. Reads use manual per-partitionFetchloops overcrabka_client_core(no consumer group).SwappableRlmm— the hot-swap facade the broker boots behind so it can start on the fail-closedNotReadyRlmmand upgrade to the topic-backed manager once its listener is serving.Broker::startselects the topic-backed manager when the[remote_storage.kafka_metadata]config section is present andin_memoryis not set totrue.
§Operational boundaries
The metadata topic is an append-only event log created with delete cleanup
and infinite retention. The manager maintains a local snapshot cache so
restarts can resume from committed per-partition offsets instead of replaying
the full topic every time. It does not use a Kafka consumer group or broker
offset commits; the broker drives assignments explicitly with
TopicBasedRemoteLogMetadataManager::reconcile_assignment. Internal Kafka
clients use plaintext loopback by default, or the TLS/SASL settings supplied
through KafkaMetadataLogConfig::security.
§In-process manager for tests and local tools
use crabka_remote_storage_topic::{
InProcessMetadataEventLog, TopicBasedRemoteLogMetadataManager,
};
use std::{path::PathBuf, time::Duration};
let event_log = InProcessMetadataEventLog::new(16);
let manager = TopicBasedRemoteLogMetadataManager::start(
event_log,
tokio::runtime::Handle::current(),
PathBuf::from("/var/lib/crabka/rlmm-cache"),
Duration::from_secs(30),
)
.await?;
manager.reconcile_assignment(&[0, 1]).await;Re-exports§
pub use error::CodecError;pub use error::MetadataLogError;pub use error::SnapshotError;pub use kafka_log::DEFAULT_NUM_PARTITIONS;pub use kafka_log::DEFAULT_REPLICATION;pub use kafka_log::KafkaMetadataEventLog;pub use kafka_log::KafkaMetadataLogConfig;pub use kafka_log::METADATA_TOPIC;pub use log::AssignmentHandle;pub use log::InProcessMetadataEventLog;pub use log::MetadataEventLog;pub use log::MetadataEventRecord;pub use log::MetadataEventStream;pub use log::PartitionStart;pub use manager::TopicBasedRemoteLogMetadataManager;pub use not_ready::NotReadyRlmm;pub use partitioning::metadata_partition_for;pub use partitioning::metadata_partitions_for;pub use serde::MetadataEvent;pub use snapshot::SNAPSHOT_FILE_NAME;pub use snapshot::SNAPSHOT_FORMAT_VERSION;pub use snapshot::Snapshot;pub use swappable::SwappableRlmm;
Modules§
- error
- Errors surfaced by the topic-backed
RemoteLogMetadataManagerand the underlyingMetadataEventLog. - kafka_
log KafkaMetadataEventLog— the productionMetadataEventLogadapter that persists events in the internal__remote_log_metadataKafka topic.- log
MetadataEventLog: the publish/subscribe seam between theTopicBasedRemoteLogMetadataManagerand the underlying durable event store.- manager
TopicBasedRemoteLogMetadataManager— productionRemoteLogMetadataManagerimplementation backed by a publish / subscribeMetadataEventLog.- not_
ready NotReadyRlmm— fail-closedRemoteLogMetadataManagerplaceholder.- partitioning
- Deterministic
TopicIdPartition→ metadata-topic-partition mapping. - serde
- Binary wire format for
__remote_log_metadataevents. - snapshot
- On-disk RLMM snapshot: a versioned envelope wrapping a
RlmmCacheDumpplus the per-metadata-partition committed offsets, so a restarting broker resumes the metadata consumer fromcommitted + 1instead of replaying__remote_log_metadatafrom offset 0. - swappable
SwappableRlmm— aRemoteLogMetadataManagerfacade whose backing implementation can be replaced atomically after construction.