Windows系统编译Qt使用的kafka(librdkafka)
去年,由于Qt项目的需要,需要使用到kafka,于是自己的编译了windows上的kafka库,这个编译的过程中真的是,一步一个坑,网上的网友留下的资料也比较久远了,编译参考也导致失败了很多次。不过最终经过一次一次的尝试最后成功了,Qt项目也成功调用了kafka。项目也成功发布了。
现在有时间了,还是决定把当时的编译过程记录下来,防止以后需要的时候,再次用到。小时候老师说,好记性不如烂笔头,还是非常有道理的。
之所以选择Kafka,主要的考虑是:
Kafka是一个开源的高吞吐量的分布式消息中间件,对比于其他缓冲和削峰:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka在中间可以起到一个缓冲的作用,把消息暂存在kafka中,下游服务就可以按照自己的节奏进行慢慢处理。
1) 解耦和扩展性:项目开始的时候,并不能确定具体需求。消息队列可以作为一个接口层,解耦重要的业务流程。只需要遵守约定,针对数据编程即可获取扩展能力。
1) 冗余:可以采用一对多的方式,一个生产者发布消息,可以被多个订阅topic的服务消费到,供多个毫无关联的业务使用。
1) 健壮性:消息队列可以堆积请求,所以消费端业务即使短时间死掉,也不会影响主要业务的正常进行。
1) 异步通信:很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。
我这个项目选型的时候,使用librdkafk主要的考虑的是:
librdkafka动态库及开发文档是专为Windows平台开发者提供的强大工具,其核心功能是为Windows环境下的Kafka应用开发提供高效的动态库和详细的API使用文档。
librdkafka动态库是基于Apache Kafka客户端库的C语言实现,为开发者提供了丰富的API接口,以实现对Kafka集群的连接、消息生产、消息消费等功能。以下是项目的关键技术特点:
技术特点:
1、跨平台支持:虽然本项目主要面向Windows平台,但librdkafka本身支持多种操作系统,如Linux、macOS等。
2、高并发性能:librdkafka采用多线程、异步处理机制,确保了高并发环境下的性能表现。
3、易用性:通过提供详细的API开发文档和示例代码,使开发者能够快速上手。
4、稳定性:librdkafka的稳定性和可靠性得到了广泛的认可,适用于生产环境。技术应用场景
librdkafka动态库及开发文档在以下场景中表现出色:1、实时数据处理:利用Kafka的高吞吐量和低延迟特性,实现实时数据流的处理和分析。
2、分布式消息系统:构建高可用、高并发的分布式消息系统,支撑企业级应用。
3、微服务架构:在微服务架构中,利用librdkafka实现服务间的异步通信。
4、日志收集:利用Kafka进行日志收集和集中处理,提高系统监控和维护效率。
项目特点
以下是librdkafka动态库及开发文档的几个显著特点:即插即用:预编译的动态库使开发者无需繁琐的编译过程,直接集成到项目中。
丰富的文档:详细的API开发文档和示例代码,帮助开发者快速掌握librdkafka的使用方法。
高度可定制:librdkafka支持多种配置选项,满足不同应用场景的需求。
社区支持:作为一个活跃的开源项目,librdkafka拥有庞大的社区和丰富的资源,为开发者提供强大的技术支持。
本专栏,接下来的几篇文章,准备更新,windows系统中编译kafka,供Qt项目调用。
一、环境准备
相关的环境准备:
1、VS2017
由于需要使用vs作为编译器,来编译相关的库和kafka库(librdkafka),所以我们的电脑需要安装vs,我是用的是vs2017。
2、Qt
Qt需要配置msvc的编译器。我的Qt的版本是Qt5.14
相关的配置安装,大家可以参考我之前的文章:
3、windows环境
我的电脑系统是windows 11 64位的操作系统。
二、kafka的编译流程
编译librdkafka还需要其他的依赖库,这些依赖的的库最好也通过同一个版本的vs编译一次。所以,如果你使用的也是vs2017,这些相关的库,你最好也使用vs2017来编译。
需要下载编译的主要内容如下:
1、librdkafka
2、perl
3、openssl
4、zlib
5、curl
6、zstd
总体的先后顺序是下面这样的:
1、perl环境配置
2、openssl的安装:
3、编译curl
4、编译zlib
5、编译zstd
6、编译librdkafka
得先把前面的环境配置完成,最后一步才是编译librdkafka。
三、perl环境配置
perl是一个脚本解释器,在这里我安装的是ActivePerl:
ActivePerl一个perl脚本解释器。其包含了包括有 Perl for Win32、Perl for ISAPI、PerlScript、Perl Package Manager四套开发工具程序,可以让用户编写出适用于unix,windows,linux系统的CGI程序来。
1、我选择安装的是ActivePerl 5.28.1,为什么选择这个,因为我之前安装的是ActiveState Perl环境,但是后面编译openssl的时候会报错,所以我替换成了ActivePerl,你只要配置这个安装环境就行了。参考连接如下:
2、配置Perl(ActiveState)环境的连接,我也放上来,仅供参考,大家编译librdkafka的时候,别安装这个就行:
四、Nasm的安装(这一步可以跳过)
x86汇编语言编译器:Netwide Assembler (简称 NASM)是一款基于x86架构的汇编与反汇编软件。
五、openssl的安装:
openssl是一个功能丰富且自包含的开源安全工具箱。
六、编译curl
cURL是一个利用URL语法在命令行下工作的文件传输工具。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。
七、编译zlib
zlib是一个开源的解压缩库,广泛应用在各种软件中,如FFmpeg、OpenSSH等。
八、编译zstd
zstd (Zstandard)是一种开源的数据压缩算法和压缩库,旨在提供高性能的数据压缩和解压缩功能。
九、编译librdkafka
十、使用libkaafka
本文原创作者:冯一川(csdn:ifeng12358),未经作者授权同意,请勿转载。