如何在Linux上安装librdkafka (linux 安装librdkafka)

Apache Kafka已经成为现代分布式系统中广泛使用的消息传递平台。然而,Kafka在某些方面缺乏特定功能,如事务支持和流处理。为了弥补这些功能,Confluent公司开发了一个名为librdkafka的C语言库。本文将介绍如何在Linux上安装和配置librdkafka。

之一步:安装依赖项

在安装前,我们需要确保安装了以下依赖项:

– gcc编译器

– openssl

– zlib

– libssl-dev

– libz-dev

在Ubuntu上,可以使用以下命令安装这些依赖项:

sudo apt update

sudo apt install gcc openssl zlib1g-dev libssl-dev libz-dev

在其他Linux操作系统上,可以使用相应的软件包管理器安装这些依赖项。

第二步:下载和安装librdkafka

可以从GitHub librdkafka存储库中下载最新版本的librdkafka。可以使用以下命令从GitHub上下载:

git clone https://github.com/edenhill/librdkafka.git

如果您没有安装Git,请使用以下命令:

sudo apt-get install git

然后切换到下载的目录,并进行编译和安装。可以使用以下命令完成:

cd librdkafka

./configure

make

sudo make install

此将在您系统中安装librdkafka。

第三步:编写和测试程序

现在安装已完成,可以编写并测试您的程序。以下示例程序使用生产者API将消息发送到Kafka主题:

#include

int mn(int argc, char **argv) {

rd_kafka_t *rk; /* Producer instance handle */

rd_kafka_conf_t *conf; /* Temporary configuration object */

char errstr[512]; /* librdkafka API error reporting buffer */

/* Set up a temporary configuration object */

conf = rd_kafka_conf_new();

/* Create a new Kafka producer – use rd_kafka_conf_dup(conf) to *

* copy the configuration, for multiple producers or consumers */

if (!(rk = rd_kafka_new(RD_KAFKA_PRODUCER, conf, errstr, sizeof(errstr)))) {

fprintf(stderr, “%% Fled to create new producer: %s\n”, errstr);

return 1;

}

/* Add brokers */

if (rd_kafka_brokers_add(rk, “localhost:9092”) == 0) {

fprintf(stderr, “%% No valid brokers specified\n”);

return 1;

}

/* Create a new topic – this topic object is *temporary* and *

* lets us specify topic-specific configuration */

rd_kafka_topic_t *rkt;

if (!(rkt = rd_kafka_topic_new(rk, “test”, NULL))) {

fprintf(stderr, “%% Fled to create topic object: %s\n”, rd_kafka_err2str(rd_kafka_last_error()));

rd_kafka_destroy(rk);

return 1;

}

/* Produce a message */

if (rd_kafka_produce(rkt, RD_KAFKA_PARTITION_UA, RD_KAFKA_MSG_F_COPY /* Copy payload */ ,

“Message payload”, 15 /* Message length */ , NULL, 0, NULL) == -1) {

fprintf(stderr, “%% Fled to produce to topic %s partition %i: %s\n”, rd_kafka_topic_name(rkt), RD_KAFKA_PARTITION_UA, rd_kafka_err2str(rd_kafka_last_error()));

rd_kafka_topic_destroy(rkt);

rd_kafka_destroy(rk);

return 1;

}

fprintf(stderr, “%% Enqueued message (%6d bytes) for topic %s\n”, 15, rd_kafka_topic_name(rkt));

rd_kafka_topic_destroy(rkt);

rd_kafka_destroy(rk);

return 0;

}

可以使用以下命令从命令行编译和运行程序:

gcc -o test_producer test_producer.c -lrdkafka

./test_producer

这将使用生产者API发送消息并输出确认消息是否已成功发送。

结论

相关问题拓展阅读:

linux 怎样查看kafka的某 topic数据

1、创建一个需要增加备份因子的topic列表的文件,文件格式是json格式的。

2、使用kafka官方提供的工具拿到上码拍面topic的partions 分布情况,并重定向到文件中。

3、修改ressgintopic.conf 文件的,手动分配新增加的partion 备份因子。

4、通过下面命令执行备份因子扩容过程,bin/kafka-reassign-partitions.sh –zookeeper localhost:reassignment-json。

5、最后查看kafka的某 topic数据如图。

注意大肆事项滚模轿:

Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。

Linux中的零拷贝技术

参考文章: 浅析Linux中的零拷贝技术

内核和用户空间,共享内存。数据copy到内核区后,只需要把地址共享给应用程序即可,无需再copy一次数据到用户空间。

优点:

缺点:

应用:

kafka生产者发送消息到broker的时候,broker的网络接收到数据后,copy到broker的内核空间。然后通过mmap技术,broker会修改消息头,添加一些元数据。所以,写入数据很快。当然顺序IO也是关键技术

内核直接发送数据到socket,无需用户空间参与。

优点:

缺点:

为了节省内核里面的一次copy,我们可以使用优化过的sendfile。该系统方法需要由特定的硬件来支持,并不是所有系统都支持。如下:

sendfile的时候,直接把内核空间的地址传递给socket缓存,DMA直接从指定地址读取数据到流里面。

sendfile只适用于将数据从文件拷贝到套接字上,限定了它的使用范围。Linux在2.6.17版本引入splice系统调用,用于在两个文件描述慎袭符中移动数据。

splice调用在两个文件描述符之间移动数据,而不需要数据在内核空间和用户空间来回拷贝。他从fd_in拷贝len长度的数据到fd_out,但是有一方必须是管道设备,这也是目前splice的一些局限性。flags参数有以下几种取值:

splice调用利用了Linux提出的管道缓冲区机制, 所以稿正至少一个描述符要为管道。

以上几种零拷贝技术都是减少数据在用户空间和内核空间拷贝技术实现的,但是有些时候,数据必须在用户空间和内核空间之间拷贝。这时候,我们只能针对数据在用户空间和内核空间拷贝的时机上下功夫了。Linux通常利用写时复制(copy on write)来减少系统开销,这个技术又时常称作COW。

摘录网上:

传统的fork()系统调用直接把所有的资源复制给新创建的进程。这种实现过于简单并且效率低下,因为它拷贝的数据也许并不共享,更糟的情况是,如果新进程打算立即执行一个新的映像,那么所有的拷贝都将前功尽弃。Linux的fork()使用写时拷贝(copy-on-write)页实现。写时拷贝是一种可以推迟甚至免除拷贝数据的技术。内核此时并不复制整个进程地址空间,而是让父进程和子进程共享同一个拷贝。只有在需要写入的时候,数据才会被复制,从而使各个进程拥有各自的拷贝。也就是说,资源的复制只有在需要写入的时候才进行,在此之前,只是以只读方式共享。这种技术使地址空间上的键孝悔页的拷贝被推迟到实际发生写入的时候。在页根本不会被写入的情况下—举例来说,fork()后立即调用exec()—它们就无需复制了。fork()的实际开销就是复制父进程的页表以及给子进程创建惟一的进程描述符。在一般情况下,进程创建后都会马上运行一个可执行的文件,这种优化可以避免拷贝大量根本就不会被使用的数据(地址空间里常常包含数十兆的数据)。由于Unix强调进程快速执行的能力,所以这个优化是很重要的。这里补充一点:Linux COW与exec没有必然联系。

我总结下:

copy-on-write技术其实是一种延迟复制的技术,只有需要用(写)的时候,才去复制数据。

linux 安装librdkafka的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux 安装librdkafka,如何在Linux上安装librdkafka,linux 怎样查看kafka的某 topic数据,Linux中的零拷贝技术的信息别忘了在本站进行查找喔。


数据运维技术 » 如何在Linux上安装librdkafka (linux 安装librdkafka)