2个版本
0.2.1 | 2024年4月21日 |
---|---|
0.2.0 | 2024年4月21日 |
0.1.0 |
|
#1346 在 数据库接口
每月下载 31次
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