---
id: "bookkeeper"
type: "component"
kind: "event-store"
provider: "default"
category: "messaging"
docs: "https://bookkeeper.apache.org/docs/reference/config"
url: "https://localhost:3000/catalogue/components/bookkeeper"
---

# Apache BookKeeper

Replicated append-only ledger storage service for write-ahead logs and message journals.

| | |
|---|---|
| Provider | [default](https://localhost:3000/catalogue?provider=default) |
| Kind | [Event store](https://localhost:3000/catalogue/kinds/event-store) |
| Category | Messaging |
| Official docs | [https://bookkeeper.apache.org/docs/reference/config](https://bookkeeper.apache.org/docs/reference/config) |

## Properties

| property | type | values | required | kind default | this component |
|---|---|---|---|---|---|
| `journalSyncData` | boolean | — | no | true | inherited |
| `journaled` | boolean | — | no | true | **true** |
| `managed` | boolean | — | no | false | **false** |
| `metadataStore` | enum | `zookeeper`, `etcd` | no | "zookeeper" | inherited |
| `replication` | enum | `none`, `raft`, `primary-replica` | no | "none" | inherited |
| `role` | enum | `journal`, `sequencer` | no | "journal" | **"journal"** |
| `snapshotIntervalEvents` | integer | — | no | — | inherited |
| `storage` | enum | `mmap`, `rocksdb`, `database` | no | "database" | inherited |
| `tlsEnabled` | boolean | — | no | false | inherited |

Bold values are the ones this component pins.

## Rules that apply · 1

### Stateful engine pinned to a single zone `stateful-engine-pinned-to-single-zone` (error)

- Page: https://localhost:3000/catalogue/rules/stateful-engine-pinned-to-single-zone.md
- Why: A matching engine, coordination service or event store living in exactly one availability zone, with no failover and no replication, is lost with that zone. Everything that depends on it stops with it.
- Applies to: every node of kind matching-engine, coordination-service or event-store
- Message: '{{node.id}}' is pinned to a single availability zone with no failover or replication.

It fires when:

- all of these hold:
  - the node sits inside exactly 1 availability-zone group
  - any of these hold:
    - the node's `failover` is "none"
    - the node's `replicated` is false
    - the node's `replication` is "none"

## Other products of the same kind · 4

- [Axon Server](https://localhost:3000/catalogue/components/axon-server.md) `axon-server` — default
- [Generic event store](https://localhost:3000/catalogue/components/event-store.md) `event-store` — default
- [EventStoreDB](https://localhost:3000/catalogue/components/eventstoredb.md) `eventstoredb` — default
- [Raft event log](https://localhost:3000/catalogue/components/raft-event-log.md) `raft-event-log` — default

## Use it in a design

```yaml
nodes:
  - { id: "bookkeeper", component: "bookkeeper" }
```

## Source (`component` YAML, verbatim)

```yaml
# yaml-language-server: $schema=../../schema/component.schema.json
# Apache BookKeeper: append-only ledgers striped across an ensemble of bookies. Entries are fsynced to
# the journal before acknowledgement (journalSyncData is enabled by default) and cluster metadata lives
# in ZooKeeper ("BookKeeper Concepts and Architecture", "BookKeeper Configuration").
schemaVersion: "1"
type: "component"
id: "bookkeeper"
kind: "event-store"
provider: "default"
docs: "https://bookkeeper.apache.org/docs/reference/config"
defaults:
  journaled: true
  role: "journal"
  managed: false
properties:
  journalSyncData:
    type: "boolean"
    default: true
  metadataStore:
    type: "enum"
    values: ["zookeeper", "etcd"]
    default: "zookeeper"
  tlsEnabled:
    type: "boolean"
    default: false
```

Human page: https://localhost:3000/catalogue/components/bookkeeper
