[
    {
        "key": "addr",
        "type": "string"
    },
    {
        "key": "advertise-addr",
        "type": "string"
    },
    {
        "key": "log-file",
        "type": "string"
    },
    {
        "key": "log-level",
        "type": "string"
    },
    {
        "key": "log.file.max-size",
        "type": "int"
    },
    {
        "key": "log.file.max-days",
        "type": "int"
    },
    {
        "key": "log.file.max-backups",
        "type": "int"
    },
    {
        "key": "log.error-output",
        "type": "string"
    },
    {
        "key": "data-dir",
        "type": "string"
    },
    {
        "key": "gc-ttl",
        "type": "int"
    },
    {
        "key": "tz",
        "type": "string"
    },
    {
        "key": "capture-session-ttl",
        "type": "int"
    },
    {
        "key": "owner-flush-interval",
        "type": "string"
    },
    {
        "key": "processor-flush-interval",
        "type": "string"
    },
    {
        "key": "sorter.sort-dir",
        "type": "string",
        "comment": "the directory used to store the temporary files generated by the sorter"
    },
    {
        "key": "sorter.cache-size-in-mb",
        "type": "int",
        "comment": "Cache size of sorter in MB."
    },
    {
        "key": "sorter.max-memory-percentage",
        "type": "int",
        "comment": "Deprecated: we don't use this field anymore."
    },
    {
        "key": "sorter.max-memory-consumption",
        "type": "int",
        "comment": "Deprecated: we don't use this field anymore."
    },
    {
        "key": "sorter.num-workerpool-goroutine",
        "type": "int",
        "comment": "Deprecated: we don't use this field anymore."
    },
    {
        "key": "sorter.num-concurrent-worker",
        "type": "int",
        "comment": "Deprecated: we don't use this field anymore ."
    },
    {
        "key": "sorter.chunk-size-limit",
        "type": "int",
        "comment": "Deprecated: we don't use this field anymore."
    },
    {
        "key": "security.ca-path",
        "type": "string"
    },
    {
        "key": "security.cert-path",
        "type": "string"
    },
    {
        "key": "security.key-path",
        "type": "string"
    },
    {
        "key": "security.cert-allowed-cn",
        "type": "json"
    },
    {
        "key": "per-table-memory-quota",
        "type": "int",
        "comment": "Deprecated: we don't use this field anymore."
    },
    {
        "key": "kv-client.enable-multiplexing",
        "type": "bool"
    },
    {
        "key": "kv-client.worker-concurrent",
        "type": "int",
        "comment": "how many workers will be used for a single region worker"
    },
    {
        "key": "kv-client.grpc-stream-concurrent",
        "type": "int",
        "comment": "how many grpc streams will be established to every TiKV node"
    },
    {
        "key": "kv-client.advance-interval-in-ms",
        "type": "int",
        "comment": "Advance table ResolvedTs interval."
    },
    {
        "key": "kv-client.frontier-concurrent",
        "type": "int",
        "comment": "how many goroutines to maintain frontiers."
    },
    {
        "key": "kv-client.worker-pool-size",
        "type": "int",
        "comment": "background workerpool size, the workrpool is shared by all goroutines in cdc server"
    },
    {
        "key": "kv-client.region-scan-limit",
        "type": "int",
        "comment": "region incremental scan limit for one table in a single store"
    },
    {
        "key": "kv-client.region-retry-duration",
        "type": "string",
        "comment": "the total retry duration of connecting a region"
    },
    {
        "key": "debug.db.count",
        "type": "int",
        "comment": "Count is the number of db count.\n\nThe default value is 8."
    },
    {
        "key": "debug.db.max-open-files",
        "type": "int",
        "comment": "MaxOpenFiles is the maximum number of open FD by db sorter.\n\nThe default value is 10000."
    },
    {
        "key": "debug.db.block-size",
        "type": "int",
        "comment": "BlockSize the block size of db sorter.\n\nThe default value is 65536, 64KB."
    },
    {
        "key": "debug.db.writer-buffer-size",
        "type": "int",
        "comment": "WriterBufferSize is the size of memory table of db.\n\nThe default value is 8388608, 8MB."
    },
    {
        "key": "debug.db.compression",
        "type": "string",
        "comment": "Compression is the compression algorithm that is used by db.\nValid values are \"none\" or \"snappy\".\n\nThe default value is \"snappy\"."
    },
    {
        "key": "debug.db.write-l0-pause-trigger",
        "type": "int",
        "comment": "WriteL0PauseTrigger defines number of db sst file at level-0 that will\npause write.\n\nThe default value is 1\u003c\u003c31 - 1."
    },
    {
        "key": "debug.db.compaction-l0-trigger",
        "type": "int",
        "comment": "CompactionL0Trigger defines number of db sst file at level-0 that will\ntrigger compaction.\n\nThe default value is 16, which is based on a performance test on 4K tables."
    },
    {
        "key": "debug.messages.client-max-batch-interval",
        "type": "string"
    },
    {
        "key": "debug.messages.client-max-batch-size",
        "type": "int"
    },
    {
        "key": "debug.messages.client-max-batch-count",
        "type": "int"
    },
    {
        "key": "debug.messages.client-retry-rate-limit",
        "type": "float"
    },
    {
        "key": "debug.messages.server-max-pending-message-count",
        "type": "int"
    },
    {
        "key": "debug.messages.server-ack-interval",
        "type": "string"
    },
    {
        "key": "debug.messages.server-worker-pool-size",
        "type": "int"
    },
    {
        "key": "debug.messages.max-recv-msg-size",
        "type": "int",
        "comment": "MaxRecvMsgSize is the maximum message size in bytes TiCDC can receive."
    },
    {
        "key": "debug.messages.keep-alive-time",
        "type": "string",
        "comment": "After a duration of this time if the server doesn't see any activity it\npings the client to see if the transport is still alive."
    },
    {
        "key": "debug.messages.keep-alive-timeout",
        "type": "string",
        "comment": "After having pinged for keepalive check, the server waits for a duration\nof Timeout and if no activity is seen even after that the connection is\nclosed."
    },
    {
        "key": "debug.scheduler.heartbeat-tick",
        "type": "int",
        "comment": "HeartbeatTick is the number of owner tick to initial a heartbeat to captures."
    },
    {
        "key": "debug.scheduler.collect-stats-tick",
        "type": "int",
        "comment": "CollectStatsTick is the number of owner tick to collect stats."
    },
    {
        "key": "debug.scheduler.max-task-concurrency",
        "type": "int",
        "comment": "MaxTaskConcurrency the maximum of concurrent running schedule tasks."
    },
    {
        "key": "debug.scheduler.check-balance-interval",
        "type": "string",
        "comment": "CheckBalanceInterval the interval of balance tables between each capture."
    },
    {
        "key": "debug.scheduler.add-table-batch-size",
        "type": "int",
        "comment": "AddTableBatchSize is the batch size of adding tables on each tick,\nused by the `BasicScheduler`.\nWhen the new owner in power, other captures may not online yet, there might have hundreds of\ntables need to be dispatched, add tables in a batch way to prevent suddenly resource usage\nspikes, also wait for other captures join the cluster\nWhen there are only 2 captures, and a large number of tables, this can be helpful to prevent\noom caused by all tables dispatched to only one capture."
    },
    {
        "key": "debug.enable-kv-connect-backoff",
        "type": "bool",
        "comment": "EnableKVConnectBackOff enables the backoff for kv connect."
    },
    {
        "key": "debug.puller.enable-resolved-ts-stuck-detection",
        "type": "bool",
        "comment": "EnableResolvedTsStuckDetection is used to enable resolved ts stuck detection."
    },
    {
        "key": "debug.puller.resolved-ts-stuck-interval",
        "type": "string",
        "comment": "ResolvedTsStuckInterval is the interval of checking resolved ts stuck."
    },
    {
        "key": "cluster-id",
        "type": "string"
    },
    {
        "key": "max-memory-percentage",
        "type": "int",
        "comment": "Deprecated: we don't use this field anymore."
    },
    {
        "key": "gc-tuner-memory-threshold",
        "type": "int"
    }
]