#clickhouse #kafka #data #service #real-time #extensible #table

bin+lib chafka

从Kafka到ClickHouse的实时数据摄取的可扩展服务

2个版本

0.2.1 2024年4月21日
0.2.0 2024年4月21日
0.1.0 2024年4月21日

#1346数据库接口

每月下载 31次

MIT 许可证

31KB
572

Chafka

从Kafka到ClickHouse的实时数据摄取的可扩展服务。

动机

ClickHouse可以使用Kafka表引擎Kafka Connect输出原生前端消费Kafka中的数据。然而,这些解决方案有自己的问题 - 尤其是缺乏灵活性和可观察性。该项目是一个独立的服务,允许您以安全和可控的方式摄取数据,同时提供对模式和反序列化过程的完全控制。

安装

使用cargo。

配置

示例配置可以在example.toml中找到。

架构

从概念上讲,服务由两个主要组件组成 - 摄取核心,负责从Kafka消费消息并将数据写入ClickHouse;以及一个或多个“解码器” - 实现将消息从Kafka反序列化为ClickHouse列集的简单特质的包。开箱即用,有一个通用的可配置Avro解码器,您也可以添加自己的。

Kafka和ClickHouse

Chafka使用Kafka的消费者组并执行安全的偏移量管理 - 它只会提交已成功插入到CH的消息的偏移量。

Chafka还自动批量插入CH以实现最佳性能。批量由批量大小和批量超时控制,允许用户根据吞吐量或延迟调整摄取过程。

交付和一致性保证

基础是“至少一次”语义 - 除非CH确认成功INSERT,否则不会提交消息偏移量。然而,请注意,现实要复杂得多:即使在确认后,由于磁盘问题或CH服务器本身的灾难性故障,写入的数据仍然可能丢失。有一些方法可以提高持久性

  • 使用复制表(ReplicatedMergeTree等)
  • 在MergeTree设置中启用更细致的fsync
    <merge_tree>
        <fsync_after_insert>1</fsync_after_insert>
        <fsync_part_directory>1</fsync_part_directory>
        <min_rows_to_fsync_after_merge>1</min_rows_to_fsync_after_merge>
        <min_compressed_bytes_to_fsync_after_merge>1</min_compressed_bytes_to_fsync_after_merge>
    </merge_tree>
    

依赖项

~27–41MB
~636K SLoC