当前位置: 首页 > wzjs >正文

电商运营和网站运营对比网站建设价格受哪些影响

电商运营和网站运营对比,网站建设价格受哪些影响,网站上线后所要做的事情,最新招商代理项目文章目录 基于 Docker 容器运行的 Kafka C 练手项目1 项目目的2 项目框架3 代码4 编译运行5 功能与接口说明5.1 Producer 接口:producer.cpp关键调用流程参数说明 5.2 Consumer 接口:consumer.cpp关键调用流程消费流程中注意 5.3 工程技术点 基于 Docke…

文章目录

  • 基于 Docker 容器运行的 Kafka + C++ 练手项目
    • 1 项目目的
    • 2 项目框架
    • 3 代码
    • 4 编译运行
    • 5 功能与接口说明
      • 5.1 Producer 接口:`producer.cpp`
        • 关键调用流程
        • 参数说明
      • 5.2 Consumer 接口:`consumer.cpp`
        • 关键调用流程
        • 消费流程中注意
      • 5.3 工程技术点

基于 Docker 容器运行的 Kafka + C++ 练手项目

使用 C++ 语言调用 Kafka 接口的示例项目,通过容器化部署 Kafka + Zookeeper 环境,实现了 Kafka 生产者与消费者的基本功能。

1 项目目的

  • 学习如何用 C++ 操作 Kafka(使用 librdkafka 的 C++ 封装)
  • 实践分布式消息队列的基本使用模式:生产者-消费者
  • 通过 Docker 快速部署 Kafka + Zookeeper 环境
  • 为将来构建中间件(如日志系统、异步任务系统、RPC 框架)奠定基础

2 项目框架

cpp-kafka-project/
├── docker-compose.yml # Kafka + Zookeeper + 开发环境容器定义
├── cpp_kafka_code/
│   ├── CMakeLists.txt
│   ├── producer.cpp
│   ├── consumer.cpp
│   └── create_topic.sh # 创建 topic 的脚本

关键技术点

  1. Kafka + Zookeeper 容器化

    • 使用 Confluent 提供的官方镜像:confluentinc/cp-kafkacp-zookeeper

    • 通过 docker-compose.yml 启动三个容器:

      • zookeeper:协调 Kafka Broker
      • kafka:消息代理
      • cpp_dev:Ubuntu 开发容器,内含 C++ 源码和构建环境
  2. Kafka C++ 客户端库

    • 使用 librdkafka 的 C++ 封装接口 rdkafkacpp.h
    • 动态链接 librdkafka++librdkafka
  3. CMake 构建系统

    • 自动查找和链接 Kafka 所需的库与头文件
    • 支持分离构建(out-of-source)

3 代码

docker-compose.yml

version: "3.8"services:zookeeper:image: confluentinc/cp-zookeeper:7.5.0container_name: zookeeperports:- "2181:2181"environment:ZOOKEEPER_CLIENT_PORT: 2181ZOOKEEPER_TICK_TIME: 2000kafka:image: confluentinc/cp-kafka:7.5.0container_name: kafkaports:- "9092:9092"environment:KAFKA_BROKER_ID: 1KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1depends_on:- zookeeperdev:image: ubuntu:22.04container_name: cpp_devtty: truestdin_open: truecommand: /bin/bashworking_dir: /home/dev/codevolumes:- ./cpp_kafka_code:/home/dev/codedepends_on:- kafka

create-topic.sh

#!/bin/bashdocker exec kafka kafka-topics \--create \--topic test_topic \--bootstrap-server localhost:9092 \--partitions 1 \--replication-factor 1

加执行权限

chmod +x create_topic.sh

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(cpp_kafka_example)set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)find_package(PkgConfig REQUIRED)
pkg_check_modules(RDKAFKA REQUIRED IMPORTED_TARGET rdkafka++)add_executable(producer producer.cpp)
target_link_libraries(producer PkgConfig::RDKAFKA)add_executable(consumer consumer.cpp)
target_link_libraries(consumer PkgConfig::RDKAFKA)

producer.cpp

#include <librdkafka/rdkafkacpp.h>
#include <iostream>
#include <csignal>
#include <memory>class ExampleEventCb : public RdKafka::EventCb {void event_cb(RdKafka::Event &event) override {if (event.type() == RdKafka::Event::EVENT_ERROR) {std::cerr << "Kafka Error: " << event.str() << std::endl;}}
};int main() {std::string brokers = "kafka:9092";std::string topic_str = "test_topic";std::string errstr;// 配置ExampleEventCb event_cb;std::unique_ptr<RdKafka::Conf> conf(RdKafka::Conf::create(RdKafka::Conf::CONF_GLOBAL));conf->set("bootstrap.servers", brokers, errstr);conf->set("event_cb", &event_cb, errstr);// 创建 producerstd::unique_ptr<RdKafka::Producer> producer(RdKafka::Producer::create(conf.get(), errstr));if (!producer) {std::cerr << "Failed to create producer: " << errstr << std::endl;return 1;}// 创建 Topicstd::unique_ptr<RdKafka::Topic> topic(RdKafka::Topic::create(producer.get(), topic_str, nullptr, errstr));if (!topic) {std::cerr << "Failed to create topic: " << errstr << std::endl;return 1;}std::string message = "Hello from C++ Kafka Producer!";RdKafka::ErrorCode resp = producer->produce(topic.get(),                            // topic ptrRdKafka::Topic::PARTITION_UA,           // partitionRdKafka::Producer::RK_MSG_COPY,         // message flagsconst_cast<char *>(message.c_str()),    // payloadmessage.size(),                         // payload sizenullptr,                                // optional keynullptr);                               // opaqueif (resp != RdKafka::ERR_NO_ERROR) {std::cerr << "Produce failed: " << RdKafka::err2str(resp) << std::endl;} else {std::cout << "Message sent successfully\n";}producer->flush(3000);return 0;
}

consumer.cpp

#include <librdkafka/rdkafkacpp.h>
#include <iostream>
#include <csignal>
#include <memory>bool running = true;void signal_handler(int) {running = false;
}class ExampleEventCb : public RdKafka::EventCb {void event_cb(RdKafka::Event &event) override {if (event.type() == RdKafka::Event::EVENT_ERROR) {std::cerr << "Kafka Error: " << event.str() << std::endl;}}
};int main() {signal(SIGINT, signal_handler);std::string brokers = "kafka:9092";std::string topic = "test_topic";std::string group_id = "cpp_consumer_group";std::string errstr;ExampleEventCb event_cb;auto conf = RdKafka::Conf::create(RdKafka::Conf::CONF_GLOBAL);conf->set("bootstrap.servers", brokers, errstr);conf->set("group.id", group_id, errstr);conf->set("auto.offset.reset", "earliest", errstr);conf->set("event_cb", &event_cb, errstr);auto consumer = RdKafka::KafkaConsumer::create(conf, errstr);if (!consumer) {std::cerr << "Failed to create consumer: " << errstr << std::endl;return 1;}consumer->subscribe({topic});std::cout << "Consuming messages from topic " << topic << std::endl;while (running) {auto msg = consumer->consume(1000);if (msg->err() == RdKafka::ERR_NO_ERROR) {std::string message(reinterpret_cast<const char*>(msg->payload()), msg->len());std::cout << "Received message: " << message << std::endl;}}delete msg;}consumer->close();delete consumer;return 0;
}

4 编译运行

  1. 启动容器
# docker-compose.yml所在目录下
docker-compose up -d
  1. 安装依赖并编译
docker exec -it cpp_dev /bin/bash
# 以下在容器内执行
apt update && apt install -y g++ cmake pkg-config librdkafka-dev librdkafka++1
mkdir -p build && cd build
cmake ..
make
  1. 创建kafka topic:
# 宿主机下
./create_topic.sh
  1. cpp_dev容器下运行consumer和producer
./consumer &
./producer

输出

/home/dev/code/build# ./consumer &
[1] 4069
/home/dev/code/build# Consuming messages from topic test_topic/home/dev/code/build# ./producer 
Message sent successfully
Received message: Hello from C++ Kafka Producer!

5 功能与接口说明

5.1 Producer 接口:producer.cpp

功能:向指定的 topic(如 test_topic)持续发送消息。

关键调用流程
RdKafka::Conf::create(...)                     // 创建配置对象
conf->set(...)                                 // 设置 broker 等参数
RdKafka::Producer::create(...)                 // 创建 Producer 实例
producer->produce(...)                         // 发送消息
参数说明
参数说明
topic目标 topic 名称
partition使用 RdKafka::Topic::PARTITION_UA 表示由 Kafka 自动分配
message flags通常为 RK_MSG_COPY
payload消息数据(char*)
payload length消息长度(size_t)

5.2 Consumer 接口:consumer.cpp

功能:从指定的 topic 订阅并消费消息。

关键调用流程
RdKafka::Conf::create(...)                     // 创建全局配置
conf->set(...)                                 // 设置 group.id 等参数
RdKafka::KafkaConsumer::create(...)            // 创建 KafkaConsumer 实例
consumer->subscribe(...)                       // 订阅 topic
consumer->consume(...)                         // 拉取消息
消费流程中注意
  • msg->payload() 需要转换为 char* 后构造成字符串打印
  • 使用 msg->err() 判断是否正常收到消息

5.3 工程技术点

技术点描述
容器部署无需本机安装 Kafka,快速启动测试环境
Kafka 消费模型使用 KafkaConsumer 拉模式消费,便于理解
CMake 模块化可轻松扩展更多模块(如 logger、metrics)
中间件模板可作为日志系统、消息队列、调度中心等中间件的原型

文章转载自:

http://aLP176kD.tfnLy.cn
http://6OhjTKsr.tfnLy.cn
http://9Wpq6xjV.tfnLy.cn
http://nE0mawGP.tfnLy.cn
http://C4HkHgVI.tfnLy.cn
http://JuGoN2oM.tfnLy.cn
http://iHeKTS7H.tfnLy.cn
http://4WvVtpaK.tfnLy.cn
http://532QrdO1.tfnLy.cn
http://i7ei24r2.tfnLy.cn
http://f6Tkxlja.tfnLy.cn
http://LuJVbpIB.tfnLy.cn
http://KIA8GJv7.tfnLy.cn
http://EEMNHdVz.tfnLy.cn
http://BCjm5RtC.tfnLy.cn
http://2zTenpZq.tfnLy.cn
http://LH5SYezw.tfnLy.cn
http://lJ5M2XpW.tfnLy.cn
http://QwMHPX0X.tfnLy.cn
http://kiMlCtSy.tfnLy.cn
http://3OotucXO.tfnLy.cn
http://s9Kjrp8g.tfnLy.cn
http://1tjLzaFI.tfnLy.cn
http://mfxp4FsN.tfnLy.cn
http://yQeemuTR.tfnLy.cn
http://wYDMhDBv.tfnLy.cn
http://cTqQbHn1.tfnLy.cn
http://ItkYoTbv.tfnLy.cn
http://r4QDxsFp.tfnLy.cn
http://eJjZI6zJ.tfnLy.cn
http://www.dtcms.com/wzjs/612361.html

相关文章:

  • 苏州市建设局招标网站首页提供网站建设方案服务
  • 上海高端点网站建设制作公司有哪些?|网站建设品牌形象网站有哪些
  • 怎么删除网站里的死链接wordpress 存储空间
  • 公司网站服务器优化论坛seo招聘
  • 网站优化技术东莞拓步网站建设
  • 专做热血电影的网站php企业网站cms
  • 清远住房和城乡建设部网站无锡网站优化建站
  • 网站地图怎么做XML怎么做自适应的网站
  • 怎么做网站排名优化做网赌需要在哪些网站投广告
  • 舟山市建设工程造价管理协会网站北京建王园林工程有限公司
  • 吉林省网站制作公司有哪些注册公司需要多少钱保证金
  • 怎么网上注册公司wordpress 优化加速
  • 山东做外贸网站的公司网站建设属于哪类工作
  • 做网站项目前怎么收集需求做网站需要招什么条件
  • 自己怎做网站子域名大全
  • 深圳下周一居家办公宁波优化seo软件公司
  • 百度网站权重排行在百度上做网站
  • 大连百姓网免费发布信息网站网络服务器配置与管理考试题
  • app网站模板wordpress 点赞按钮
  • 外贸网站建设公司排名wordpress 如何安装
  • wordpress 图片显示插件下载网站排名seo软件
  • 一个主机建多少个网站网站备案 停站
  • 微信怎么建设自己网站张家港网站推广优化
  • 东莞品牌整合营销seo是什么意思网络用语
  • 婚庆手机版网站建设宿州网站开发建设
  • 网站建设程序有哪些方面上海网络广告推广平台
  • 设计公司网站模板心悦dnf免做卡网站
  • 湖南手机网站建设公司c 网站开发 vs2012
  • wap网站建设设计电商网站建设工具
  • 北京地铁建设的官方网站网站建设运营公司排行