详解最小化 Kafka 到 ClickHouse 延迟的原理和方法

Clickhouse实时消费Kafka Clickhouse一、背景介绍二、操作流程三、一些概念四、一些问题 一、背景介绍 这么做的好处有: 二、操作流程 三、一些概念 四、一些问题 1、StorageKafka (queue): Can’t get assignment. It can be caused by some issue with consumer group (not enough partitions?). Will keep trying 2、clickhouse DB::CSVRowInputFormat::readRow 阅读详情

。

图片

本文字数:4801;估计阅读时间:13 分钟

审校:大平

本文在公众号【ClickHouseInc】首发

图片

引言

ClickHouse 博客上的很多话题都是由社区参与的公共讨论引起的,诸如 Slack 频道等。随着最近我们正式发布了官方 Kafka 连接器,及其在 Confluent Cloud 中的支持,已经有人联系到我们:咨询将数据从 Kafka 传输到 ClickHouse Cloud 时应该怎么考虑,如何缩短同步的延迟。这是一个很好的讨论话题,我们已经将对这个问题的回答,整理成为本文 - 让我们详细讨论一下吧!

Kafka 连接器是如何工作的?

首先,让我们先分析一下 Kafka 与 ClickHouse 之间的连接是如何工作的(以及我们的连接器在其中的位置)。一个示例的数据流可能如下所示:

图片

从本质上说,生产者将数据提交到主题(A),这些主题由“Kafka Connect”通过轮询(B)获取并发送到连接器,然后连接器将记录推送到 ClickHouse(C)。在上图中,A 与 B独立 ,B 与 C独立  - 它们是三个不同的系统,彼此之间有网络连接。

当然,实现可能会有所不同,但现在我们将讨论这个最普遍的示例设置,以便涵盖大多数的使用场景 - 如果您的设置没有以上涉及到的组件,请随意忽略没有的部分。

什么是延迟?

这可能很显而易见,但值得重复定义它:延迟(在本文中)是数据从点 A 传送到点 B 所花费的时间。它会受到各种因素的影响,最常见的是硬件、软件和网络。

硬件因素通常是导致延迟的物理限制 - 虚拟机大小、处理器速度等。我们将这些留给读者来解决,并专注于连接器的本身,以及它可以控制的变量。

软件因素通常是:设计的限制,而不是物理问题 - 线程数量、数据结构、配置方式等。它们也很常见,并且是本文的大部分内容要重点讨论的。

网络因素通常是节点之间的物理网络、虚拟机之间的虚拟连接、客户端到服务器的距离等。

什么时候延迟会成为一个问题?

在我们深入探讨延迟是怎样产生的之前,简要的讨论一下“何时”和“为什么”也很重要,“我为什么要关心延迟?延迟在什么时候会导致问题的发生?”

在您的用例方面,您才是专家,但我们会提醒您,不要对延迟设定不切实际的期望 - 我们很容易过度的关注延迟的细微改变,其实这些差异不太可能对业务产生重大的影响,例如即使有一两秒的偏差也会导致告警。请记住,在分布式的网络环境中,会存在着一定程度的延迟 - 我们的工作方向是:在尽可能的情况下,更多的是去减轻/稳定延迟,而不是完全消除它。理想情况下,您应该能够确定:多少的延迟是可接受的,并将其保持在一个预定义的范围内 - 这可能是通过 SLA 来管理的。

同样,一个用例可能会比另一个用例容忍更多的延迟 - 如果您是每周分析一次数据,那么这与实时分析数据相比,可能会容忍更多的延迟。即使对于实时分析,“实时”意味着什么?那也是必须有您来决定的 - 再次,在您的用例方面,您才是专家;只要记住:硬件/软件/网络限制等因素都会导致延迟。

该如何测量延迟?

为了确定您的 Kafka 管道中是否存在延迟问题,您需要能测量延迟。

最简单的方法是:在 Kafka 管道的各个点上,将时间戳值追加到消息中。这样在后续,就可以进行比较和可视化,以分析出可能导致延迟的步骤。

我们见过的实现这个目标①真正有效的方法是:使用单消息转换器:

图片

① 有多种可用的选项,例如 JMX,但我们发现 SMT 已经足够好 - YMMV

此转换(transform)采用了多个开箱即用的字段(偏移量、分区、时间戳和主题),并将它们添加到了连接器要传递给 ClickHouse 的对象中,而无需更改消息的生产者。可以将此转换器配置在各个运行的步骤上,这样用户就可以推理出延迟发生在处理管道的哪个部分。

图片

上述转换可以让我们在 Kafka 管道的不同阶段记录耗时。我们还可以记录确切的消息插入 ClickHouse 的时间,作为行的时间点。这可以通过使用 DEFAULT 表达式插入时间戳来实现,然后还可以将其与转换器添加的早期时间戳进行比较:

CREATE TABLE data_testing
(
  `raw` String,
  `generationTimestamp` DateTime64(3),
  `insertTime` DateTime64(3) DEFAULT now()
)
ENGINE = MergeTree
ORDER BY insertTime

注意,我们正在使用“DEFAULT now()”,来让 ClickHouse 生成时间戳,而不是包含在消息本身中 - 这将为我们提供插入的时间。

如果您的消息有生成时间戳,您还可以跟踪以下时间点之间的关系:消息生成 <-> Kafka 插入 <-> ClickHouse 插入。

如何可视化延迟?

常见的可视化延迟的方法是:使用 ClickHouse SQL 控制台(ClickHouse Cloud 上)所提供的内置表:

图片

此图的数据是由一个相当简单的查询创建的,用于计算中位数、第 75 个百分位和第 99 个百分位:

SELECT formatDateTime(insertTime, '%F %k:%i') as byMinutes,
    median(dateDiff('second', generationTimestamp, insertTime)) AS median,
    median(.75)(dateDiff('second', generationTimestamp, insertTime)) AS p_75,
    median(.95)(dateDiff('second', generationTimestamp, insertTime)) AS p_95
FROM default.kafka_data
WHERE insertTime > now() - interval 60 MINUTE
GROUP BY byMinutes
ORDER BY byMinutes ASCENDING

InsertTime 由默认列(前面使用“now()”提到)提供,而 generationTimestamp 是我们生成数据时设置的列 - 您也可以轻松地使用类似于 kafkaField (前面提到的是由转换器创建的)的东西。

注意:示例图表中的数据显示了缓慢增加的延迟时间,而仅看到这一点就,我们就足以判断这里可能存在着问题 - 这就是可视化的力量!

如何应对延迟?

我们将介绍一些解决延迟的方法,但请记住,此列表并不详尽 - 您可能会发现其他更有效的方法。如果发现了,请告诉我们 - 汇聚的信息越多,我们就能更好地帮助更多人!

延迟可能发生在系统的多个部分。我们将在以下每个阶段解决潜在的原因。

Kafka 和 Kafka Connect 之间的延迟

提取和批处理大小

连接器通过 Kafka Connect 独立的获取到记录数据,您可以通过设置 consumer.fetch.min.bytes 和 consumer.fetch.max.bytes 来调整它。您可以想象,这里有一个权衡取舍 - 理想情况下,您获取的记录总数要比批处理大小(即条数)多,以便始终有足够的记录填充批处理。如果您发现并不经常生成消息,甚至可以通过设置 consumer.fetch.max.wait.ms 来调整提取的发生频率 - 可能需要更长的时间,但如果批处理达到了最大条数(因此要优化需要建立连接的数量),提取更有可能命中。

同样,另一方面,连接器收到的批处理由轮询控制(默认值为 500):

consumer.max.poll.records=[NUMBER OF RECORDS]
consumer.max.partition.fetch.bytes=[NUMBER OF RECORDS * RECORD SIZE IN BYTES]

不同的 Kafka Connect 主机,将有不同的处理调整方法 - 例如,请参阅 Confluent 的文档(https://docs.confluent.io/cloud/current/connectors/bring-your-connector/custom-connector-manage.html#override-configuration-properties)以了解他们首选的方法。

分区数量

主题分区的数量会影响插入的数量和批量大小(这可能会增加网络通信的频繁性,正如你所想象的那样)。一百条消息分布在一百个分区上会比单个分区产生更大的影响,尤其是基于运行的任务/工作者数量。由于上述的轮询和提取过程是每个任务执行的(见下文),更多的分区可能会增加填充批次的时间(如果遵循下面的建议,每个分区一个任务),从而潜在地增加延迟。因此,我们通常建议倾向于更少的分区(在合理范围内),而不是更多,但对于分区大小并没有确定的规则。

我们一般建议以每次至少1,000行的相对较大批次插入数据,最好在10,000到100,000行之间(有关更多信息,请参阅我们的最佳实践(https://clickhouse.com/docs/en/cloud/bestpractices/bulk-inserts))。

任务数量

在Kafka Connect中,任务是实际复制数据的工作程序 - 我们已经看到建议您至少具有与分区相同数量的任务,以确保每个“通道”正常运行。

如果您想深入了解任务,请查看Confluent关于此主题的文档(https://docs.confluent.io/platform/current/connect/index.html#tasks)。

部分(Part)过多

我们遇到过的一个问题是“部分过多”错误 - ClickHouse针对大量数据(经过适当批处理)进行了优化,而不是频繁的小插入(经典的“喋喋不休”与“批量”网络辩论)。插入是根据任务处理的 - 每个任务负责将该任务的数据插入ClickHouse - 因此,更多的分区/任务并不总是更好。

Kafka Connect与ClickHouse Cloud之间的延迟

实例休眠

ClickHouse Cloud 在没有处理查询服务时,会让实例进入休眠(以节省成本)状态。这意味着当插入和查询活动存在间隙时,实例可能会被暂停。如果当有新数据涌入时,这个机制就可能导致延迟,因为实例需要被重新启动。

如果这种延迟是不可接受的,用户可以调整服务对工作负载的空闲超时设置 - 将其增加以确保较短的活动暂停期并不会导致空闲。

实例大小

更多的数据将需要更多的容量 - 尽管ClickHouse非常高效,但这个一般的格言仍然适用。ClickHouse Cloud通常会为您处理扩缩容 - 有关更多详细信息,请参阅我们的文档(https://clickhouse.com/docs/en/about-us/cloud#clickhouse-cloud-benefits)。

异步 vs 同步插入

默认情况下,我们的连接器通过同步插入发送数据 - 在继续之前等待确认。从防数据丢失的角度来看,这通常更安全,但它确实会一定程度的引入延迟,因为每次插入都需要确认成功。

另一方面,可以配置异步插入,只需提交数据而无需等待 - 可能会提高吞吐量。如果潜在的丢失消息不是问题(例如,您正在进行消费者分析,并且需要更多的数据而不是特定的条目),这可能是一种更快的方法。请注意,这种方法意味着较低的耐久性保证,最低提供至少一次的语义。

有关配置的更多详细信息,请参阅我们的文档(https://clickhouse.com/docs/en/optimize/asynchronous-inserts)。

结论

在本文中,我们描述了在Kafka和ClickHouse架构中可能出现的延迟问题。除了确定延迟的原因和最小化方法外,我们首先提出了一种简单的衡量和可视化延迟的方法。

希望这对您的ClickHouse之旅有所帮助 - 还有更多内容要发布!

图片

​​联系我们

手机号:13910395701

邮箱:Tracy.Wang@clickhouse.com

满足您所有的在线分析列式数据库管理需求

Debezium CDC实战:从原理到生产环境部署与调优 在数据驱动的现代架构中,实时数据同步是构建实时数仓、微服务解耦和缓存更新的核心需求。传统批处理ETL工具存在时间延迟和对源库压力大的问题。CDC(变更数据捕获)技术通过读取数据库事务日志(如MySQL的binlog)来捕获数据变更,实现了毫秒级的低延迟数据流。其技术价值在于将数据变更作为事件流发布,为下游的流处理框架(如Flink、Spark)提供实时数据源。Debezium作为CDC领域的开源明星,基于Kafka Connect框架,通过无状态的Connector实时捕获变更并发布到Kafka,广泛应用于 阅读详情

相关推荐

Kafka数据与ClickHouse的实时同步

本文将介绍如何使用Kafka引擎将Kafka中的数据实时同步到ClickHouse,并提供相应的源代码示例。通过配置Kafka引擎和创建相应的表结构,我们可以方便地实现数据的实时传输和分析。而ClickHouse则专注于数据的实时查询和分析,能够满足大规模数据的处理需求。当数据被发送到Kafka主题后,ClickHouse的Kafka引擎会自动消费数据并将其插入到相应的表中。在将Kafka数据同步到ClickHouse之前,我们需要在ClickHouse中创建相应的表结构。指定Kafka集群的地址和端口,

WdzDevops的博客 796

ClickHouse 与 Kafka 整合: 实时数据流处理与分析解决方案

1.背景介绍 随着数据量的不断增长,实时数据处理和分析变得越来越重要。ClickHouse 和 Kafka 都是在现代数据技术中发挥着重要作用的工具。ClickHouse 是一个高性能的列式数据库,专为 OLAP 和实时数据分析而设计。Kafka 是一个分布式流处理平台,用于构建实时数据流管道和流处理应用程序。 在这篇文章中,我们将讨论如何将 ClickHouse 与 Kafka 整合,以实现...

AI天才研究院 2097

智能枕头

睡觉和吃饭是一样重要的,一个人想要健康的体魄,不仅要饮食得当,更需要有一个好的睡眠质量。随着人们生活品质的提高,人们对于睡眠的要求越来越高,那么就非常需要一款舒适的枕头。为了适应市场的需求,我爱物联网推出了智能枕头。因为智能枕头可以给头部及颈椎一个良好的承托力,舒适、柔软、放松,让人更好的进入睡眠。 目录 一、智能枕头方案介绍 二、智能枕头的优点 三、智能枕头功能介绍 四、智能枕头APP开发 五、...

6108我爱物联网方案开发优快云博客 3659

ClickHouse 与 Kafka 整合:实时数据处理解决方案

1.背景介绍 随着数据的增长,实时数据处理变得越来越重要。ClickHouse 和 Kafka 都是处理大规模数据的工具,但它们各自有其优势和局限性。ClickHouse 是一个高性能的列式数据库,用于实时数据处理和分析。Kafka 是一个分布式流处理平台,用于构建实时数据流管道和事件驱动应用程序。在某些情况下,将这两者结合使用可以为实时数据处理提供更好的性能和灵活性。在本文中,我们将讨论如何将...

AI天才研究院 1228

Ansys Lumerical 启动时出现 Error: Could not connect to Ansys license server specified at 1055@ 的另一种解决办法

昨天在关闭了中之后 就能正常打开 FDTD 了,结果今天想开启出现了同样的报错:我猜测昨天能启动的原因在于关闭之后要重启电脑,并且在重启之后我第一时间打开 lumerical 测试因此端口没有被占用,今天是在电脑启动之后一段时间才打开所以又遇到了端口占用的问题。

qq_51404184的博客 9549

IFIX往Mysql数据库同步数据方法

通过IFix数据库向Mysql数据库同步数据

仙人掌 1595

使用clickhouse kafka表引擎消费kafka写入clickhouse

本文使用seatunnel 消费kafka数据写入clickhouse文章的kafka topic,用另一种方式写入clickhouse,也是练习下clickhouse kafka引擎。本文也默认已安装了kafka与clickhouse,这方面的安装文档很多,这里不做详述;前提准备 kafka :2.7.0;通过filebeat 写入kafka一、kafka数据格式使用kafka 命令查看数据格式:{},},},},"ecs": {},"host": {},"log": {

flye的专栏 3027

用Python+OpenCV搞定线激光相机标定:从棋盘格到3D点云的保姆级实战

本文详细介绍了使用Python和OpenCV进行线激光相机标定的全流程实战,从硬件准备到3D点云重建。涵盖相机内参标定、激光平面方程拟合、三维重建等关键技术,提供完整的代码实现和工程优化建议,帮助开发者实现毫米级精度的工业检测和三维测量系统。

weixin_29227425的博客 283

浅淡 Apache Kylin 与 ClickHouse 的对比

Apache Kylin 和 ClickHouse 都是目前市场流行的大数据 OLAP 引擎;Kylin 最初由 eBay 中国研发中心开发,2014 年开源并贡献给 Apache 软件基金会,凭借着亚秒级查询的能力和超高的并发查询能力,被许多大厂所采用,包括美团,滴滴,携程,贝壳找房,腾讯,58同城等; OLAP 领域这两年炙手可热的 ClickHouse,由俄罗斯搜索巨头 Yandex 开发,于2016年开源,典型用户包括字节跳动、新浪、腾讯等知名企业。 这两种 OLAP 引擎有什么差异,各自有什么优势

monkeyboy_tech的博客 4440

基于Apache MINA SSHD配置及应用

Apache MINA SSHD是一个基于Java的开源SSH服务器/客户端实现,支持SSH2协议,提供文件传输、shell访问等功能。该代码实现了一个SftpClientService服务类,封装了SFTP文件操作,包括读取文件(readOnce/readLines)和写入文件(writeOnce)等核心功能。通过SftpProperties配置类管理连接参数,并采用Builder模式创建SSH会话。主要特点包括:支持大文件分块传输、自动创建目录、严格的异常处理和...

流沙QuickSand 945

多传感器融合SLAM指南:如何结合视觉与激光雷达提升建图精度

本文深入探讨了多传感器融合SLAM技术,详细解析了如何将视觉传感器与激光雷达(特别是3D激光雷达)进行深度融合以提升建图精度与鲁棒性。文章从传感器特性分析、数据同步标定、前端融合策略(松耦合与紧耦合)到后端优化与地图构建,提供了完整的实战指南,并重点介绍了V-LOAM等经典融合框架的核心思想,旨在帮助开发者构建适应复杂动态环境的高精度SLAM系统。

weixin_29056145的博客 535

选型的看过来:Apache Kylin 与 ClickHouse 的优劣对比

Apache Kylin 与 ClickHouse 的不用应用场景前言1.技术原理2.存储3.优化策略5.总结 前言 Apache Kylin 和 ClickHouse 都是目前市场流行的大数据 OLAP 引擎;Kylin 最初由 eBay 中国研发中心开发,2014 年开源并贡献给 Apache 软件基金会,凭借着亚秒级查询的能力和超高的并发查询能力,被许多大厂所采用,包括美团,滴滴,携程,贝壳找房,腾讯,58同城等; OLAP 领域这两年炙手可热的 ClickHouse,由俄罗斯搜索巨头 Yandex

weixin_51485976的博客 2486

【Segment Anything Model】三:SAM模型微调自定义数据集,更改混合提示方式:点,框,点框混合

1.微调SAM预备知识。

cvxiayixiao的博客 1万+

OLAP 系统选型,选 Apache Kylin 还是 ClickHouse?

作者简介 周耀,Kyligence 解决方案架构师,Apache Kylin、Apache Superset Contributor。Apache Kylin 和 ClickHouse ...

过往记忆大数据 1346

美团mtgsig 1.2算法分析

mtgsig1.2的一些算法总结

记录一些web逆向的过程 3500

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Apache Kylin 与 ClickHouse 的对比

正文 Apache Kylin 和 ClickHouse 都是目前市场流行的大数据 OLAP 引擎;Kylin 最初由 eBay 中国研发中心开发,2014 年开源并贡献给 Apache 软件基金会,凭借着亚秒级查询的能力和超高的并发查询能力,被许多大厂所采用,包括美团,滴滴,携程,贝壳找房,腾讯,58同城等; OLAP 领域这两年炙手可热的 ClickHouse,由俄罗斯搜索巨头 Yandex 开发,于2016年开源,典型用户包括字节跳动、新浪、腾讯等知名企业。 这两种 OLAP 引擎有什么差异,各

格子衫 837

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

clickhouse 多用户_浅淡 Apache Kylin 与 ClickHouse 的对比

作者简介 周耀,Kyligence 解决方案架构师,Apache Kylin、Apache Superset Contributor。Apache Kylin 和 ClickHouse 都是目前市场流行的大数据 OLAP 引擎;Kylin 最初由 eBay 中国研发中心开发,2014 年开源并贡献给 Apache 软件基金会,凭借着亚秒级查询的能力和超高的并发查询能力,被许多大厂所采用,...

weixin_39829236的博客 119

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

clickhouse官方文档_浅谈 Apache Kylin 与 ClickHouse 的对比

正文Apache Kylin 和 ClickHouse 都是目前市场流行的大数据 OLAP 引擎;Kylin 最初由 eBay 中国研发中心开发,2014 年开源并贡献给 Apache 软件基金会,凭借着亚秒级查询的能力和超高的并发查询能力,被许多大厂所采用,包括美团,滴滴,携程,贝壳找房,腾讯,58同城等;OLAP 领域这两年炙手可热的 ClickHouse,由俄罗斯搜索巨头 Yand...

weixin_39892460的博客 414

clickhouse 多用户_Kylin 概览 | 浅淡 Apache Kylin 与 ClickHouse 的对比

作者简介 周耀,Kyligence 解决方案架构师,Apache Kylin、Apache Superset Contributor。Apache Kylin 和 ClickHouse 都是目前市场流行的大数据 OLAP 引擎;Kylin 最初由 eBay 中国研发中心开发,2014 年开源并贡献给 Apache 软件基金会,凭借着亚秒级查询的能力和超高的并发查询能力,被许多大厂所采用,...

weixin_39618176的博客 111

OLAP:Kylin or ClickHouse

Apache Kylin 和 ClickHouse 都是目前市场流行的大数据 OLAP 引擎;Kylin 最初由 eBay 中国研发中心开发,2014 年开源并贡献给 Apache 软件基金会,凭借着亚秒级查询的能力和超高的并发查询能力,被许多大厂所采用,包括美团,滴滴,携程,贝壳找房,腾讯,58同城等; OLAP 领域这两年炙手可热的 ClickHouse,由俄罗斯搜索巨头 Yandex 开发,于2016年开源,典型用户包括字节跳动、新浪、腾讯等知名企业。 这两种 OLAP 引擎有什么差异,各自有什么

someInNeed的博客 434

八、Kafka 原理与常见应用场景

Kafka是一个分布式流处理平台,具备发布订阅、持久化存储和实时流处理三大核心能力。其架构基于Broker节点、Topic分区和副本机制,通过顺序写入、零拷贝、页缓存等技术实现高吞吐低延迟。支持消费者组并行消费和消息广播,但需注意Rebalance问题。典型应用场景包括日志收集、系统解耦削峰和实时数据管道,适用于高并发数据传输和处理需求。

qq_22812761的博客 516
上一篇: ClickHouse Keeper: 一个用 C++ 编写的 ZooKeeper 替代品
下一篇: ClickHouse Release 23.10 版本发布说明
ClickHouseDB
博客等级 码龄3年 1707粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值