ksi*_*ndi 3 java mysql apache-kafka apache-kafka-connect debezium
使用Debezium 0.7读取MySQL,但在初始快照阶段出现刷新超时和OutOfMemoryError错误。查看下面的日志,似乎连接器试图一次写太多消息:
WorkerSourceTask{id=accounts-connector-0} flushing 143706 outstanding messages for offset commit [org.apache.kafka.connect.runtime.WorkerSourceTask]
WorkerSourceTask{id=accounts-connector-0} Committing offsets [org.apache.kafka.connect.runtime.WorkerSourceTask]
Exception in thread "RMI TCP Connection(idle)" java.lang.OutOfMemoryError: Java heap space
WorkerSourceTask{id=accounts-connector-0} Failed to flush, timed out while waiting for producer to flush outstanding 143706 messages [org.apache.kafka.connect.runtime.WorkerSourceTask]
Run Code Online (Sandbox Code Playgroud)
对于大型数据库(> 50GB),想知道什么是正确的设置http://debezium.io/docs/connectors/mysql/#connector-properties。对于较小的数据库,我没有这个问题。简单地增加超时时间似乎不是一个好的策略。我目前正在使用默认的连接器设置。
按照以下建议更改设置,并解决了问题:
OFFSET_FLUSH_TIMEOUT_MS: 60000 # default 5000
OFFSET_FLUSH_INTERVAL_MS: 15000 # default 60000
MAX_BATCH_SIZE: 32768 # default 2048
MAX_QUEUE_SIZE: 131072 # default 8192
HEAP_OPTS: '-Xms2g -Xmx2g' # default '-Xms1g -Xmx1g'
Run Code Online (Sandbox Code Playgroud)
这是一个非常复杂的问题-首先,Debezium Docker映像的默认内存设置非常低,因此,如果您使用它们,可能有必要增加它们。
接下来,有多个因素在起作用。我建议执行以下步骤。
max.batch.size和max.queue.size减少提交次数offset.flush.timeout.ms-提供连接时间来处理累积的记录offset.flush.interval.ms-应减少累计抵消额不幸的是,KAFKA-6551在后台潜伏着一个问题,但仍然会造成严重破坏。
| 归档时间: |
|
| 查看次数: |
845 次 |
| 最近记录: |