美文网首页
ClickHouse Kafka引擎表问题排查(一)

ClickHouse Kafka引擎表问题排查(一)

作者: 淡淡的小番茄 | 来源:发表于2021-03-28 08:46 被阅读0次

    Clickhouse错误日志,一直刷新如下信息:

    <Warning> StorageKafka (sync_kafka_device_location): Can't get assignment. It can be caused by some issue with consumer group (not enough partitions?). Will keep trying.

    1、检查了,kafka、zookeeper未发下异常。

    2、重启了clickhouse,错误依旧。

    3、detach物化视图、产出kafka引擎表再重新创建,部分表恢复了,有的表错误依旧。

    4、然后查看topic在不在

    ./kafka-topics.sh --describe --zookeeper 172.30.125.52:2181 --topic ck.device.location

    发现topic不存在。

    然后新建topic:

    ./bin/kafka-topics.sh --create --bootstrap-server 172.30.125.52:9092 --replication-factor 1 --partitions 3 --topic  ck.device.location

    然后问题解决,发现日志不再报错。

    tail -f clickhouse-server.err.log | grep sync_kafka_device_location

    总结了下,kafka引擎表出现这样的异常,可能的情况有:

    1、kafka引擎表本身的配置问题。

    比如,broker-list地址配置有误、消费者数大于分区数。

    2、kafka问题

    比如:kafka服务异常(分区不可用、Leader选举、zookeeper异常等)。

    kafka引擎表的使用方式:

    1、使用引擎创建Kafka使用者并将其视为数据流。

    2、创建具有所需结构的表。

    3、创建一个物化视图,该视图将转换来自引擎的数据并将其放入先前创建的表中。

    当MATERIALIZED VIEW加入引擎时,它开始在后台收集数据。这样一来,您就可以持续接收来自Kafka的消息,并使用将它们转换为所需的格式SELECT。一个kafka表可以具有任意数量的实例化视图,它们不直接从kafka表中读取数据,而是接收新记录(以块为单位)。

    为了提高性能,kafka引擎表会将接收到的消息分组为max_insert_block_size大小的块。如果未在stream_flush_interval_ms毫秒内形成该块,则无论该块的完整性如何,数据都将刷新到表中。两个参数的解释如下:

    max_insert_block_size:插入表中要形成的块的大小。此设置仅在服务器构成块的情况下适用。对通过HTTP接口的INSERT,服务器解析数据格式并形成指定大小的块。默认1048576。默认值略大于max_block_size,这样做是因为某些表引擎(* MergeTree)在磁盘上为每个插入的块形成了一个数据部分,这是一个相当大的实体。类似地,* MergeTree表在插入期间对数据进行排序,并且足够大的块大小允许对RAM中的更多数据进行排序。

    stream_flush_interval_ms:在超时或线程生成max_insert_block_size行的情况下,适用于具有流式传输的表,默认7500。值越小,将数据刷新到表中的频率越高。将该值设置得太低会导致性能下降。

    相关文章

      网友评论

          本文标题:ClickHouse Kafka引擎表问题排查(一)

          本文链接:https://www.haomeiwen.com/subject/cutphltx.html