簡體   English   中英

Kafka JDBC Sink Connector,批量插入值

[英]Kafka JDBC Sink Connector, insert values in batches

我每秒收到很多消息(通過 http 協議)(50000 - 100000)並想將它們保存到 PostgreSql。 為此,我決定使用 Kafka JDBC Sink。

消息按一條記錄保存到數據庫中,而不是批量保存。 我想在 PostgreSQL 中批量插入記錄,記錄大小為 500-1000。

我在這個問題上找到了一些答案: How to use batch.size?

我嘗試在配置中使用相關選項,但似乎沒有任何效果。

我的 Kafka JDBC Sink PostgreSql 配置( etc/kafka-connect-jdbc/postgres.properties ):

name=test-sink
connector.class=io.confluent.connect.jdbc.JdbcSinkConnector
tasks.max=3

# The topics to consume from - required for sink connectors like this one
topics=jsonb_pkgs

connection.url=jdbc:postgresql://localhost:5432/test?currentSchema=test
auto.create=false
auto.evolve=false

insert.mode=insert
connection.user=postgres
table.name.format=${topic}

connection.password=pwd

batch.size=500
# based on 500*3000byte message size
fetch.min.bytes=1500000
fetch.wait.max.ms=1500
max.poll.records=4000

我還為connect-distributed.properties添加了選項:

consumer.fetch.min.bytes=1500000
consumer.fetch.wait.max.ms=1500

雖然每個分區每秒獲取 1000 多條記錄,但記錄是按一條保存到 PostgreSQL 的。

編輯:消費者選項已添加到具有正確名稱的其他文件中

我還在etc/schema-registry/connect-avro-standalone.properties添加了選項:

# based on 500*3000 byte message size
consumer.fetch.min.bytes=1500000
consumer.fetch.wait.max.ms=1500
consumer.max.poll.records=4000

我意識到我誤解了文檔。 記錄被一條一條地插入到數據庫中。 一筆交易中插入的記錄數取決於batch.sizeconsumer.max.poll.records 我預計批量插入是以另一種方式實現的。 我想有一個選項來插入這樣的記錄:

INSERT INTO table1 (First, Last)
VALUES
    ('Fred', 'Smith'),
    ('John', 'Smith'),
    ('Michael', 'Smith'),
    ('Robert', 'Smith');

但這似乎是不可能的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM