########################################################### # Akka Persistence Extension Reference Configuration File # ########################################################### # This is the reference config file that contains all the default settings. # Make your edits in your application.conf in order to override these settings. # Directory of persistence journal and snapshot store plugins is available at the # Akka Community Projects page http://akka.io/community/ # Default persistence extension settings. akka.persistence { # When starting many persistent actors at the same time the journal # and its data store is protected from being overloaded by limiting number # of recoveries that can be in progress at the same time. When # exceeding the limit the actors will wait until other recoveries have # been completed. max-concurrent-recoveries = 50 # Fully qualified class name providing a default internal stash overflow strategy. # It needs to be a subclass of akka.persistence.StashOverflowStrategyConfigurator. # The default strategy throws StashOverflowException. internal-stash-overflow-strategy = "akka.persistence.ThrowExceptionConfigurator" journal { # Absolute path to the journal plugin configuration entry used by # persistent actor by default. # Persistent actor can override `journalPluginId` method # in order to rely on a different journal plugin. plugin = "" # List of journal plugins to start automatically. Use "" for the default journal plugin. auto-start-journals = [] } snapshot-store { # Absolute path to the snapshot plugin configuration entry used by # persistent actor by default. # Persistent actor can override `snapshotPluginId` method # in order to rely on a different snapshot plugin. # It is not mandatory to specify a snapshot store plugin. # If you don't use snapshots you don't have to configure it. # Note that Cluster Sharding is using snapshots, so if you # use Cluster Sharding you need to define a snapshot store plugin. plugin = "" # List of snapshot stores to start automatically. Use "" for the default snapshot store. auto-start-snapshot-stores = [] } # used as default-snapshot store if no plugin configured # (see `akka.persistence.snapshot-store`) no-snapshot-store { class = "akka.persistence.snapshot.NoSnapshotStore" } # Default reliable delivery settings. at-least-once-delivery { # Interval between re-delivery attempts. redeliver-interval = 5s # Maximum number of unconfirmed messages that will be sent in one # re-delivery burst. redelivery-burst-limit = 10000 # After this number of delivery attempts a # `ReliableRedelivery.UnconfirmedWarning`, message will be sent to the actor. warn-after-number-of-unconfirmed-attempts = 5 # Maximum number of unconfirmed messages that an actor with # AtLeastOnceDelivery is allowed to hold in memory. max-unconfirmed-messages = 100000 } # Default persistent extension thread pools. dispatchers { # Dispatcher used by every plugin which does not declare explicit # `plugin-dispatcher` field. default-plugin-dispatcher { type = PinnedDispatcher executor = "thread-pool-executor" } # Default dispatcher for message replay. default-replay-dispatcher { type = Dispatcher executor = "fork-join-executor" fork-join-executor { parallelism-min = 2 parallelism-max = 8 } } # Default dispatcher for streaming snapshot IO default-stream-dispatcher { type = Dispatcher executor = "fork-join-executor" fork-join-executor { parallelism-min = 2 parallelism-max = 8 } } } # Fallback settings for journal plugin configurations. # These settings are used if they are not defined in plugin config section. journal-plugin-fallback { # Fully qualified class name providing journal plugin api implementation. # It is mandatory to specify this property. # The class must have a constructor without parameters or constructor with # one `com.typesafe.config.Config` parameter. class = "" # Dispatcher for the plugin actor. plugin-dispatcher = "akka.persistence.dispatchers.default-plugin-dispatcher" # Dispatcher for message replay. replay-dispatcher = "akka.persistence.dispatchers.default-replay-dispatcher" # Removed: used to be the Maximum size of a persistent message batch written to the journal. # Now this setting is without function, PersistentActor will write as many messages # as it has accumulated since the last write. max-message-batch-size = 200 # If there is more time in between individual events gotten from the journal # recovery than this the recovery will fail. # Note that it also affects reading the snapshot before replaying events on # top of it, even though it is configured for the journal. recovery-event-timeout = 30s circuit-breaker { max-failures = 10 call-timeout = 10s reset-timeout = 30s } # The replay filter can detect a corrupt event stream by inspecting # sequence numbers and writerUuid when replaying events. replay-filter { # What the filter should do when detecting invalid events. # Supported values: # `repair-by-discard-old` : discard events from old writers, # warning is logged # `fail` : fail the replay, error is logged # `warn` : log warning but emit events untouched # `off` : disable this feature completely mode = repair-by-discard-old # It uses a look ahead buffer for analyzing the events. # This defines the size (in number of events) of the buffer. window-size = 100 # How many old writerUuid to remember max-old-writers = 10 # Set this to `on` to enable detailed debug logging of each # replayed event. debug = off } } # Fallback settings for snapshot store plugin configurations # These settings are used if they are not defined in plugin config section. snapshot-store-plugin-fallback { # Fully qualified class name providing snapshot store plugin api # implementation. It is mandatory to specify this property if # snapshot store is enabled. # The class must have a constructor without parameters or constructor with # one `com.typesafe.config.Config` parameter. class = "" # Dispatcher for the plugin actor. plugin-dispatcher = "akka.persistence.dispatchers.default-plugin-dispatcher" circuit-breaker { max-failures = 5 call-timeout = 20s reset-timeout = 60s } } fsm { # PersistentFSM saves snapshots after this number of persistent # events. Snapshots are used to reduce recovery times. # When you disable this feature, specify snapshot-after = off. # To enable the feature, specify a number like snapshot-after = 1000 # which means a snapshot is taken after persisting every 1000 events. snapshot-after = off } } # Protobuf serialization for the persistent extension messages. akka.actor { serializers { akka-persistence-message = "akka.persistence.serialization.MessageSerializer" akka-persistence-snapshot = "akka.persistence.serialization.SnapshotSerializer" } serialization-bindings { "akka.persistence.serialization.Message" = akka-persistence-message "akka.persistence.serialization.Snapshot" = akka-persistence-snapshot } serialization-identifiers { "akka.persistence.serialization.MessageSerializer" = 7 "akka.persistence.serialization.SnapshotSerializer" = 8 } } ################################################### # Persistence plugins included with the extension # ################################################### # In-memory journal plugin. akka.persistence.journal.inmem { # Class name of the plugin. class = "akka.persistence.journal.inmem.InmemJournal" # Dispatcher for the plugin actor. plugin-dispatcher = "akka.actor.default-dispatcher" # Turn this on to test serialization of the events test-serialization = off } # Local file system snapshot store plugin. akka.persistence.snapshot-store.local { # Class name of the plugin. class = "akka.persistence.snapshot.local.LocalSnapshotStore" # Dispatcher for the plugin actor. plugin-dispatcher = "akka.persistence.dispatchers.default-plugin-dispatcher" # Dispatcher for streaming snapshot IO. stream-dispatcher = "akka.persistence.dispatchers.default-stream-dispatcher" # Storage location of snapshot files. dir = "snapshots" # Number load attempts when recovering from the latest snapshot fails # yet older snapshot files are available. Each recovery attempt will try # to recover using an older than previously failed-on snapshot file # (if any are present). If all attempts fail the recovery will fail and # the persistent actor will be stopped. max-load-attempts = 3 } # LevelDB journal plugin. # Note: this plugin requires explicit LevelDB dependency, see below. akka.persistence.journal.leveldb { # Class name of the plugin. class = "akka.persistence.journal.leveldb.LeveldbJournal" # Dispatcher for the plugin actor. plugin-dispatcher = "akka.persistence.dispatchers.default-plugin-dispatcher" # Dispatcher for message replay. replay-dispatcher = "akka.persistence.dispatchers.default-replay-dispatcher" # Storage location of LevelDB files. dir = "journal" # Use fsync on write. fsync = on # Verify checksum on read. checksum = off # Native LevelDB (via JNI) or LevelDB Java port. native = on # Number of deleted messages per persistence id that will trigger journal compaction compaction-intervals { } } # Shared LevelDB journal plugin (for testing only). # Note: this plugin requires explicit LevelDB dependency, see below. akka.persistence.journal.leveldb-shared { # Class name of the plugin. class = "akka.persistence.journal.leveldb.SharedLeveldbJournal" # Dispatcher for the plugin actor. plugin-dispatcher = "akka.actor.default-dispatcher" # Timeout for async journal operations. timeout = 10s store { # Dispatcher for shared store actor. store-dispatcher = "akka.persistence.dispatchers.default-plugin-dispatcher" # Dispatcher for message replay. replay-dispatcher = "akka.persistence.dispatchers.default-replay-dispatcher" # Storage location of LevelDB files. dir = "journal" # Use fsync on write. fsync = on # Verify checksum on read. checksum = off # Native LevelDB (via JNI) or LevelDB Java port. native = on # Number of deleted messages per persistence id that will trigger journal compaction compaction-intervals { } } } akka.persistence.journal.proxy { # Class name of the plugin. class = "akka.persistence.journal.PersistencePluginProxy" # Dispatcher for the plugin actor. plugin-dispatcher = "akka.actor.default-dispatcher" # Set this to on in the configuration of the ActorSystem # that will host the target journal start-target-journal = off # The journal plugin config path to use for the target journal target-journal-plugin = "" # The address of the proxy to connect to from other nodes. Optional setting. target-journal-address = "" # Initialization timeout of target lookup init-timeout = 10s } akka.persistence.snapshot-store.proxy { # Class name of the plugin. class = "akka.persistence.journal.PersistencePluginProxy" # Dispatcher for the plugin actor. plugin-dispatcher = "akka.actor.default-dispatcher" # Set this to on in the configuration of the ActorSystem # that will host the target snapshot-store start-target-snapshot-store = off # The journal plugin config path to use for the target snapshot-store target-snapshot-store-plugin = "" # The address of the proxy to connect to from other nodes. Optional setting. target-snapshot-store-address = "" # Initialization timeout of target lookup init-timeout = 10s } # LevelDB persistence requires the following dependency declarations: # # SBT: # "org.iq80.leveldb" % "leveldb" % "0.7" # "org.fusesource.leveldbjni" % "leveldbjni-all" % "1.8" # # Maven: # # org.iq80.leveldb # leveldb # 0.7 # # # org.fusesource.leveldbjni # leveldbjni-all # 1.8 #