如何确保插入率1插入每秒使用clickhouseio

nwo49xxi  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(1)|浏览(338)

我使用apachebeamjavasdk来处理事件并将它们写入clickhouse数据库。幸运的是,有现成的使用clickhouseio。
clickhouseio累积元素并批量插入它们,但由于管道的并行性,在我的例子中,它仍然会导致每秒大量插入。我经常在clickhouse中收到“db::exception:too many parts”或“db::exception:too many simultaneous querys”。
clickhouse文档建议每秒执行一次插入。有什么方法可以确保clickhouseio做到这一点吗?可能是在clickhouseio.write或者其他什么之前?

z18hc3ub

z18hc3ub1#

您对这些错误的解释似乎不太正确:
db::异常:部件太多
这意味着insert影响的分区比允许的多(默认情况下,该值为100,由参数max\u partitions\u per\u insert\u block管理)。
所以要么受影响的分区的计数非常大,要么按键分区的定义非常精细。
如何修复:
尝试对insert批进行分组,使其包含与少于100个分区相关的数据
尝试减小insert块的大小(如果它很大的话)-使用maxinsertblocksize
增加sql查询中每个插入块的最大\u分区\u的限制(如下所示,插入。。设置max\u partitions\u per\u insert\u block=300(我认为clickhouseio应该能够在查询级别上设置自定义选项)或在服务器端修改userprofile设置
db::异常:同时查询太多
这个由param max\u concurrent\u查询管理。
如何修复:
通过beam方法减少并发查询的数量
增加用户配置文件或服务器设置中服务器端的限制(请参阅https://github.com/clickhouse/clickhouse/issues/7765)

相关问题