ClickHouse Kafka 性能
ClickHouse Kafka Performance
按照文档中的示例:
https://clickhouse.yandex/docs/en/table_engines/kafka/
我用 Kafka Engine 创建了一个 table 和一个将数据推送到 MergeTree table.
的物化视图
这是我的 table 的结构:
CREATE TABLE games (
UserId UInt32,
ActivityType UInt8,
Amount Float32,
CurrencyId UInt8,
Date String
) ENGINE = Kafka('XXXX.eu-west-1.compute.amazonaws.com:9092,XXXX.eu-west-1.compute.amazonaws.com:9092,XXXX.eu-west-1.compute.amazonaws.com:9092', 'games', 'click-1', 'JSONEachRow', '3');
CREATE TABLE tests.games_transactions (
day Date,
UserId UInt32,
Amount Float32,
CurrencyId UInt8,
timevalue DateTime,
ActivityType UInt8
) ENGINE = MergeTree(day, (day, UserId), 8192);
CREATE MATERIALIZED VIEW tests.games_consumer TO tests.games_transactions
AS SELECT toDate(replaceRegexpOne(Date,'\..*','')) as day, UserId, Amount, CurrencyId, toDateTime(replaceRegexpOne(Date,'\..*','')) as timevalue, ActivityType
FROM default.games;
在 Kafka 主题中,我每秒收到大约 150 条消息。
一切正常,部分数据在table更新,延迟较大,肯定不是实时的。
似乎只有当我达到 65536 条新消息 准备好在 Kafka 中使用时,数据才会从 Kafka 发送到 table
我应该设置一些特定的配置吗?
我尝试从 cli 更改配置:
SET max_insert_block_size=1048
SET max_block_size=655
SET stream_flush_interval_ms=750
但是没有改善
我应该更改任何特定配置吗?
我是否应该在创建 table 之前更改上述配置?
ClickHouse 上存在此问题 github
- https://github.com/yandex/ClickHouse/issues/2169.
基本上在创建table之前需要先设置max_block_size(http://clickhouse-docs.readthedocs.io/en/latest/settings/settings.html#max-block-size),否则是不行的。
我使用了覆盖users.xml的解决方案:
<yandex>
<profiles>
<default>
<max_block_size>100</max_block_size>
</default>
</profiles>
</yandex>
我删除了 table 和数据库并重新创建了它们。它对我有用。现在可能 table 每 100 条记录更新一次。
按照文档中的示例: https://clickhouse.yandex/docs/en/table_engines/kafka/
我用 Kafka Engine 创建了一个 table 和一个将数据推送到 MergeTree table.
的物化视图这是我的 table 的结构:
CREATE TABLE games (
UserId UInt32,
ActivityType UInt8,
Amount Float32,
CurrencyId UInt8,
Date String
) ENGINE = Kafka('XXXX.eu-west-1.compute.amazonaws.com:9092,XXXX.eu-west-1.compute.amazonaws.com:9092,XXXX.eu-west-1.compute.amazonaws.com:9092', 'games', 'click-1', 'JSONEachRow', '3');
CREATE TABLE tests.games_transactions (
day Date,
UserId UInt32,
Amount Float32,
CurrencyId UInt8,
timevalue DateTime,
ActivityType UInt8
) ENGINE = MergeTree(day, (day, UserId), 8192);
CREATE MATERIALIZED VIEW tests.games_consumer TO tests.games_transactions
AS SELECT toDate(replaceRegexpOne(Date,'\..*','')) as day, UserId, Amount, CurrencyId, toDateTime(replaceRegexpOne(Date,'\..*','')) as timevalue, ActivityType
FROM default.games;
在 Kafka 主题中,我每秒收到大约 150 条消息。
一切正常,部分数据在table更新,延迟较大,肯定不是实时的。
似乎只有当我达到 65536 条新消息 准备好在 Kafka 中使用时,数据才会从 Kafka 发送到 table
我应该设置一些特定的配置吗?
我尝试从 cli 更改配置:
SET max_insert_block_size=1048
SET max_block_size=655
SET stream_flush_interval_ms=750
但是没有改善
我应该更改任何特定配置吗?
我是否应该在创建 table 之前更改上述配置?
ClickHouse 上存在此问题 github - https://github.com/yandex/ClickHouse/issues/2169.
基本上在创建table之前需要先设置max_block_size(http://clickhouse-docs.readthedocs.io/en/latest/settings/settings.html#max-block-size),否则是不行的。
我使用了覆盖users.xml的解决方案:
<yandex>
<profiles>
<default>
<max_block_size>100</max_block_size>
</default>
</profiles>
</yandex>
我删除了 table 和数据库并重新创建了它们。它对我有用。现在可能 table 每 100 条记录更新一次。