Configurations

Andy X is an open-source distributed streaming platform designed to deliver the best performance possible for high-performance data pipelines, streaming analytics, streaming between microservices and data integrations.

andy x logo

Configuration

Andy X Node can be configured anytime, but these configurations will require restarting on the Node. There are two groups of configurations per each node:

  • Storage Configuration,
  • Transport Configuration

Storage Configuration

Default values of Topic related storage configurations can be changed within the config file data/active/storage_config.json. In the table bellow are shown the settings you can apply to the node.

KeysDescription
DefaultWriteBufferSizeInByteswrite_buffer_size sets the size of a single memtopic. Once memtopic exceeds this size, it is marked immutable and a new one is created, for now we are creating as 100MB SIZE.
DefaultMaxWriteBufferNumbermax_write_buffer_number sets the maximum number of memtopics, both active and immutable. If the active memtopic fills up and the total number of memtopics is larger than max_write_buffer_number we stall further writes. This may happen if the flush process is slower than the write rate.
DefaultMaxWriteBufferSizeToMaintainThe amount of write history to maintain in memory, in bytes. This includes the current memtopic size, sealed but unflushed memtopics, and flushed memtopics that are kept around. Andy X will try to keep at least this much history in memory - if dropping a flushed memtopic would result in history falling below this threshold, it would not be dropped. (Default: 0)
DefaultMinWriteBufferNumberToMergemin_write_buffer_number_to_merge is the minimum number of memtopics to be merged before flushing to storage. For example, if this option is set to 2, immutable memtopics are only flushed when there are two of them - a single immutable memtopic will never be flushed. If multiple memtopics are merged together, less data may be written to storage since two updates are merged to a single key. However, every Get() must traverse all immutable memtopics linearly to check if the key is there. Setting this option too high may hurt read performance.
DefaultMaxBackgroundCompactionsThreadsmax_background_compactions is the maximum number of concurrent background compactions. The default is 1, but to fully utilize your CPU and storage you might want to increase this to the minimum of (the number of cores in the system, the disk throughput divided by the average throughput of one compaction thread).
DefaultMaxBackgroundFlushesThreadsmax_background_flushes is the maximum number of concurrent flush operations. It is usually good enough to set this to 1.
MaxLogFileSizeInBytesmax_log_file_size file size in bytes for rocksdb logs, default is 104857600.
DeleteObsoleteFilesPeriodMillisecondsDeleteObsoleteFilesPeriodMilliseconds the interval for checking when to delete obsolete files default is 1800000.
EnableWriteThreadAdaptiveYieldEnableWriteThreadAdaptiveYield
MaxFileOpeningThreadsMaxFileOpeningThreads number of internal files opening in same time, default is 4.
KeepLogFileNumberKeepLogFileNumber number of keeping log files, default is 5.
DumpStatsInSecondsDumpStatsInSeconds interval of keeping stats in memory, default is 5.
ClusterWriteBufferSizeInBytesClusterWriteBufferSizeInBytes, default is 128000000.
ClusterMaxWriteBufferNumberClusterMaxWriteBufferNumber, default is 4.
ClusterMaxWriteBufferSizeToMaintainClusterMaxWriteBufferSizeToMaintain, default is 0.
ClusterMinWriteBufferNumberToMergeClusterMinWriteBufferNumberToMerge, default is 2.
ClusterMaxBackgroundCompactionsThreadsClusterMaxBackgroundCompactionsThreads, default is 2.
ClusterMaxBackgroundFlushesThreadsClusterMaxBackgroundFlushesThreads, default is 1.
ClusterMaxBackgroundCompactionsThreadsDumpStatsInSeconds interval of keeping stats in memory, default is 5.
InboundMemoryReleaseInMillisecondsInboundMemoryReleaseInMilliseconds release memory interval if is not being used, default is 300000.
InboundFlushCurrentEntryPositionInMillisecondsInboundFlushCurrentEntryPositionInMilliseconds flushing pointers to disk, default is 5000.
OutboundBackgroundIntervalReadMessagesInMillisecondsOutboundBackgroundIntervalReadMessagesInMilliseconds service checking for new messages after all messages are consumed, default is 500.
OutboundFlushCurrentEntryPositionInMillisecondsOutboundFlushCurrentEntryPositionInMilliseconds flushing pointers to disk, default is 5000.
RetentionBackgroundServiceIntervalInMinutesRetentionBackgroundServiceIntervalInMinutes interval of retention service, default is 30.
RetentionBulkMessagesCountToAnalyzeRetentionBulkMessagesCountToAnalyze number of messages to check from retention service, default is 1000.

storage_config.json and storage_initial.json

if storage_config.json does exits on data/active/storage_config.json, please do configurations in this file. In case, if the node is deployed but not-started changes can be done from settings/initial_configs/storage_initial.json.

Attention, if node is running, changes from settings/initial_configs/storage_initial.json will not be submitted.

{
  "KeepLogFileNumber": 5,
  "DumpStatsInSeconds": 5,
  "DeleteObsoleteFilesPeriodMilliseconds": 1800000,
  "EnableWriteThreadAdaptiveYield": true,
  "MaxFileOpeningThreads": 4,
  "MaxLogFileSizeInBytes": 104857600,
  "InboundMemoryReleaseInMilliseconds": 300000,
  "InboundFlushCurrentEntryPositionInMilliseconds": 5000,
  "OutboundFlushCurrentEntryPositionInMilliseconds": 5000,
  "OutboundBackgroundIntervalReadMessagesInMilliseconds": 500,
  "DefaultWriteBufferSizeInBytes": 64000000,
  "DefaultMaxWriteBufferNumber": 4,
  "DefaultMaxWriteBufferSizeToMaintain": 0,
  "DefaultMinWriteBufferNumberToMerge": 2,
  "DefaultMaxBackgroundCompactionsThreads": 1,
  "DefaultMaxBackgroundFlushesThreads": 1,
  "ClusterWriteBufferSizeInBytes": 128000000,
  "ClusterMaxWriteBufferNumber": 4,
  "ClusterMaxWriteBufferSizeToMaintain": 0,
  "ClusterMinWriteBufferNumberToMerge": 2,
  "ClusterMaxBackgroundCompactionsThreads": 2,
  "ClusterMaxBackgroundFlushesThreads": 1,
  "RetentionBackgroundServiceIntervalInMinutes": 30,
  "RetentionBulkMessagesCountToAnalyze": 1000
}

Transport Configuration

Transport configuration can be changed within the config file data/active/transport_config.json. In the table bellow are shown the settings you can apply to the node.

KeysDescription
ClientTimeoutIntervalClientTimeoutInterval The server considers the client disconnected if it hasn’t received a message (including keep-alive) in this interval. It could take longer than this timeout interval for the client to be marked disconnected due to how this is implemented. The recommended value is double the KeepAliveInterval value, default is 30
HandshakeTimeoutHandshakeTimeout If the client doesn’t send an initial handshake message within this time interval, the connection is closed. This is an advanced setting that should only be modified if handshake timeout errors are occurring due to severe network latency, default is 15
KeepAliveIntervalKeepAliveInterval If the server hasn’t sent a message within this interval, a ping message is sent automatically to keep the connection open. When changing KeepAliveInterval, change the ServerTimeout or serverTimeoutInMilliseconds setting on the client. The recommended ServerTimeout or serverTimeoutInMilliseconds value is double the KeepAliveInterval value, default is 15
StreamBufferCapacityStreamBufferCapacity The maximum number of items that can be buffered for client upload streams. If this limit is reached, the processing of invocations is blocked until the server processes stream items, default is 10
MaximumReceiveMessageSizeInBytesMaximumReceiveMessageSizeInBytes Maximum size of a single incoming message, default is un-limited
MaximumParallelInvocationsPerClientMaximumParallelInvocationsPerClient The maximum number of hub methods that each client can call in parallel before queueing, default is 1
ApplicationMaxBufferSizeInBytesApplicationMaxBufferSizeInBytes The maximum number of bytes received from the client that the server buffers before applying backpressure. Increasing this value allows the server to receive larger messages faster without applying backpressure, but can increase memory consumption, default is 64000
TransportMaxBufferSizeInBytesTransportMaxBufferSizeInBytes The maximum number of bytes sent by the app that the server buffers before observing backpressure. Increasing this value allows the server to buffer larger messages faster without awaiting backpressure, but can increase memory consumption, default is 64000

transport_config.json and transport_initial.json

if transport_config.json does exits on data/active/transport_config.json, please do configurations in this file. In case, if the node is deployed but not-started changes can be done from settings/initial_configs/transport_initial.json.

Attention, if node is running, changes from settings/initial_configs/transport_initial.json will not be submitted.

{
  "ClientTimeoutInterval": 30,
  "HandshakeTimeout": 15,
  "KeepAliveInterval": 15,
  "StreamBufferCapacity": 10,
  "MaximumReceiveMessageSizeInBytes": null,
  "MaximumParallelInvocationsPerClient": 1,
  "ApplicationMaxBufferSizeInBytes": 64000,
  "TransportMaxBufferSizeInBytes": 64000
}