大数据领域常用的Kafka、ON和数据库简介 (kafka json 数据库)

随着信息化和网络化程度的加深,大数据技术已经走进我们的生活和工作之中。而在大数据技术中,Kafka、ON和数据库无疑是非常重要和常用的技术工具。本文将分别介绍它们的概念、特点以及使用方法。

一、Kafka

1.概念

Kafka是一种开源的分布式流处理平台,由Apache基金会开发。它是一个高吞吐量、低延迟的消息传递系统,用于处理实时数据流。Kafka将数据以流的形式发布和订阅,为数据提供高可用性,可扩展性和可快速部署的特性。

2.特点

Kafka有以下特点:

(1)多分区支持。Kafka中的数据分为topic、partitions、messages三个概念。在Kafka中,消息被分配到不同的partitions中,每个partition在不同的broker上被维护。

(2)高吞吐量。Kafka能处理的消息数达到每秒上万条,同时保持低延迟和高可用性。

(3)可扩展性。基于分布式计算的架构设计,Kafka能够支持水平扩展,提高处理能力。

(4)消息持久化。在Kafka中,消息被保存在硬盘中,保证了可靠性和持久性。

3.使用方法

Kafka的使用方法包括以下几步:

(1)安装配置Kafka服务器。

(2)创建topics,指定partitions数量。

(3)生产者将消息推送到topic。

(4)消费者从topic中获取消息。

二、ON

1.概念

ON(JavaScript Object Notation)是一种轻量级的数据交换格式,可以方便地在应用程序中进行解析和生成。ON格式被设计为具有易读性,以及有效的机器和人类可读交互性,并且易于编写和解析。

2.特点

ON有以下特点:

(1)简洁。ON格式为纯文本,易于编写和阅读。

(2)可读性高。ON格式具有良好的易读性和可视化效果。

(3)可嵌套。ON格式的元素可以嵌套,构成一个综合的数据结构。

(4)可扩展。ON格式可以根据需求扩展新增属性和方法。

3.使用方法

ON的使用方法包括以下几步:

(1)创建一个需要转换的ON对象。

(2)把ON对象序列化成ON字符串。

(3)把ON字符串传输到另一个系统。

(4)把ON字符串反序列化成ON对象。

(5)根据需求,对ON对象进行解析。

三、数据库

1.概念

数据库是一种组织和存储数据的软件,用于管理和维护大量有组织的数据。数据库可以被视为一个文件库,可以存储和操作各种数据,如数字、声音、图像等。

2.特点

数据库有以下特点:

(1)可持久化。数据库中的数据可以长期存储,不会因为电脑重启或程序结束而消失。

(2)高效性。数据库可以实现高性能的数据访问,能够高速处理大量数据。

(3)可拓展。基于分布式计算的架构设计,数据库能够支持水平扩展,提高处理能力。

(4)安全性。数据库提供了严格的权限管理和多层次安全保护,防止数据被非法访问。

3.使用方法

数据库的使用方法包括以下几步:

(1)创建一个数据库管理系统。

(2)创建一个数据库。

(3)创建一个表格,并定义其结构和属性。

(4)向表格中添加数据。

(5)进行数据查询和修改。

综上所述,Kafka、ON和数据库是大数据领域中非常重要和常用的工具。它们各有不同的特点和优势,可以帮助我们更好地处理大量的数据,提高工作效率和数据管理能力。在实际应用中,需要根据需求选择合适的工具,并学习其使用方法和技巧。

相关问题拓展阅读:

clickhouse与kafka集成

clickhouse支持与多种存储引擎集成,可以从集成的引擎里面读取消息,然后写到真正的数据存储表里。

clickhouse批量写入则老李的性能比较好,我们的业务场景下会大批量的产生数据,如果使用clickhouse-jdbc去写的,写入时机和每批次写入的数量不好把控,最终选择了先将消息写入kafka,然后由clickhouse从kafka消孙迟费数据,clickhouse server消费到数据之后写入真正的数据表。

clickhouse集成kafka引擎见官方文档:

下面的介绍会与官方文档有重复,然后补充一些集成过程中遇到的坑。

下面介绍clickhouse与kafka集成的步骤,clickhouse版本是22.1.3.7

必要参数

可选参数

关于必选参数中的kafka_format参数,参见Formats部分,format具体解释如下

ONEachRow, ONStringsEachRow, ONCompactEachRow, ONCompactStringsEachRow

这几种格式,ClickHouse会将行输出为用换行符分隔的ON值,这些输出数据作为一个整体时,由于没有分隔符(,)因而不是有效的ON文档。

官方文档给了一些示例。

由于我的真实的数据表,有一个字段是json类型的字符串,但是一开始设置kafka_format的类型为ONEachRow时,从kafka消费数据会报错,所以kafka_format格式设置成了ONAsString,具体的错误后面贴出来。

创建kafka引擎表,用于从kafka消费数据

由于我的数据结构里有嵌套json,如果使用ONEachRow,有个字段是json类型的字符串,带转义字符,导致clickhouse解析失败,没找到解决办法,所以使用了ONAsString格式。

一个简单的MergeTree引擎的表,其中content是json格式的字符串。

创建的物化视图用于把从kafka消费到的数据,写到真实的数据表里,在这个例子里,msg_json_source从kafka消费到数据,然后通过物化视图msg_json_source_consumer将消费到的数据写到真实的数据表msg_target中。

由于从kafka消费到的数据就是一个json字符串,在这里使用ONExtractString等json字段提取工具,提取msg里的字段,比如biz,sender_id,content等字段。

status_time原本计划用DatTime64类型的,但是这个时间格式有坑,最终选择了使用UInt64存毫秒级时间戳,具体的问题下面再介绍。

在clickhouse创建好3张表之后(kafka引擎表,真实数据表,物化视图表),往kafka发消息

本地安装一个简易的kafka服务端,然后创建topic

创建好topic之后,使用Java客户端往kafka发消息,使用confluent client发也可以。

添加kafka依赖

实体类,使含搭用fastjson的@ONField注解,实体类转字符串的时候,将驼峰转换为下划线

测试类

最终发送完,我们查看一下clickhouse里的数据表的数据,可以发现我们发送到kakfa里的数据,已经成功的消费,并且写入到真实的数据表里了。

当时测试环境部署的版本是21.9,但是这个版本有问题,不推荐安装,建议直接部署22以上的clickhouse

我一开始就是使用的ONEachRow格式,但是我的消息体里还有嵌套的json,类似下面这种格式,里面有个字段还是个json,转行成字符串带转义字符。

然后消息体的string字符串贴一条在这里

然后clickhouse解析消息体报错,当时的错找不到了,现在复现不出来了,非常的难顶。。。。

后来因为赶版本的原因把kafka_format换成了ONAsString。

clickhouse是支持DateTime64格式的,可以到毫秒级,但是实际使用过程中却有些坑在,

首先是有的客户端解析毫秒字符串有问题,其次是使用ONExtract*的方法,会有差异,再然后是jdbc查询的时候,也会导致时间查询有问题。

拿毫秒时间戳和秒级时间戳做试验,clickhouse-server版本是22.3.1.1

把上面的kafka引擎表拿出来改一下

其中status_time这个字段的类型改成DateTime64(3, ‘Asia/Shanghai’),使用ONExtractUInt提取时间,看下效果

首先发条数据,数据内容如下

传入的是毫秒级时间戳,然后数据表存储的时候就变成了2282年

然后如果传入秒级的时间戳,真实的数据是这样

clickhouse存储的时候看着时间正常了,但是毫秒丢失了

然后修改一下物化视图的字段提取方式,之前是 ONExtractUInt(msg,’status_time’) as status_time,现在改成使用 ONExtractString(msg,’status_time’) as status_time提取时间

会发现时间类型又正常了。

这一条数据内容如下

最终使用ONExtractString提取毫秒时间戳,得到了正确的DateTime64的时间,非常的神奇

最终我决定来了个釜底抽薪的方法,时间直接用UInt64存,因为我发送出去的数据是毫秒级时间戳,最终存时间戳,查询时间范围的时候直接用long类型的数据between好了。

这也是无奈之举,万一哪天server更新版本,导致时间出现问题,那就完蛋了,希望后面时间可以稳定一点吧。

kafka json 数据库的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于kafka json 数据库,大数据领域常用的Kafka、ON和数据库简介,clickhouse与kafka集成的信息别忘了在本站进行查找喔。


数据运维技术 » 大数据领域常用的Kafka、ON和数据库简介 (kafka json 数据库)