搭建kafka测试环境

搭建kafka测试环境

启动zookeeper

docker pull bitnami/zookeeper
docker run -d --name zookeeper \-e ALLOW_ANONYMOUS_LOGIN=yes \bitnami/zookeeper:latest

启动kafka

创建网络与连接

docker network create kafka-network
docker network connect kafka-network zookeeper
docker network connect kafka-network kafka

安装kafka

docker pull bitnami/kafka

启动kafka

docker run -d --name kafka --network kafka-network \-e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 \-e KAFKA_LISTENERS=PLAINTEXT://:9092 \-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092 \-e KAFKA_HEAP_OPTS="-Xmx512M -Xms512M" \-p 9092:9092 bitnami/kafka

在这个命令中,KAFKA_HEAP_OPTS 环境变量用于限制 Kafka 使用的 JVM 堆内存大小。

使用Docker Compose 启动(推荐)

使用 Docker Compose 的优点之一就是它管理了网络和服务之间的依赖关系,使得整个过程更加简洁和自动化。

创建一个Docker Compose 文件,名称为 docker-compose-kafka-dev.yml

version: '3'services:zookeeper:image: bitnami/zookeeper:latestenvironment:- ALLOW_ANONYMOUS_LOGIN=yesnetworks:- kafka-networkkafka:image: bitnami/kafka:latestenvironment:- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181- KAFKA_LISTENERS=PLAINTEXT://:9092- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092- KAFKA_HEAP_OPTS=-Xmx512M -Xms512Mports:- "9092:9092"depends_on:- zookeepernetworks:- kafka-networknetworks:kafka-network:driver: bridge

启动容器

docker compose -f docker-compose-kafka-dev.yml up -d

创建topic

进入容器

docker exec -it [KAFKA_CONTAINER_NAME] /bin/bash

KAFKA_CONTAINER_NAME 可使用 docker ps 查看

创建topic

kafka-topics.sh --create --topic your-topic-name --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

查看topic

kafka-topics.sh --list --bootstrap-server localhost:9092

代码示例

生产者
/provider/main.go

package mainimport ("fmt""log""net/http""github.com/Shopify/sarama"
)var producer sarama.SyncProducerfunc main() {var err errorproducer, err = sarama.NewSyncProducer([]string{"localhost:9092"}, nil)if err != nil {log.Fatalf("Error creating Kafka producer: %s", err)}defer producer.Close()http.HandleFunc("/send", sendMessage)log.Fatal(http.ListenAndServe(":8080", nil))
}func sendMessage(w http.ResponseWriter, r *http.Request) {message := r.URL.Query().Get("message")if message == "" {http.Error(w, "Missing message", http.StatusBadRequest)return}_, _, err := producer.SendMessage(&sarama.ProducerMessage{Topic: "your-topic-name",Value: sarama.StringEncoder(message),})if err != nil {http.Error(w, err.Error(), http.StatusInternalServerError)return}fmt.Fprintf(w, "Message sent: %s", message)
}

消费者
/consumer/main.go

package mainimport ("fmt""log""github.com/Shopify/sarama"
)func main() {consumer, err := sarama.NewConsumer([]string{"localhost:9092"}, nil)if err != nil {log.Fatalf("Error creating Kafka consumer: %s", err)}defer consumer.Close()partitionConsumer, err := consumer.ConsumePartition("your-topic-name", 0, sarama.OffsetNewest)if err != nil {log.Fatalf("Error creating Kafka partition consumer: %s", err)}defer partitionConsumer.Close()for message := range partitionConsumer.Messages() {fmt.Printf("Received message: %s\n", string(message.Value))}
}

测试请求

curl localhost:8080/send?message=hello

终端返回: Message sent: hello

消费者控制台输出: Received message: hello

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/674371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【小程序】基础API之系统API接口汇总

ty.env 环境变量 属性 USER_DATA_PATH string 文件系统中的用户目录路径 (本地路径),当操作文件时需使用此目录。 // 写入一个文件 const fileManager await ty.getFileSystemManager(); const fileRoot ty.env.USER_DATA_PATH; const filePath ${fileRoot}…

探索C语言中的联合体与枚举:数据多面手的完美组合!

​ ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C语言学习 贝蒂的主页:Betty‘s blog 1. 联合体的定义 联合体又叫共用体,它是一种特殊的数据类型&…

2024智慧城市新纪元:引领未来,重塑都市生活

随着科技的飞速发展和数字化转型的不断深入,2024年智慧城市领域迎来了全新的发展格局。 这一年,智慧城市的建设更加注重人性化、可持续性和创新性,为城市居民带来了前所未有的便捷与舒适。以下将重点关注智慧城市的几个核心内容,…

《幻兽帕鲁》攻略:0基础入门及游戏基础操作 幻兽帕鲁基础设施 幻兽帕鲁基础攻击力 Mac苹果电脑玩幻兽帕鲁 幻兽帕鲁加班加点

今天就跟大家聊聊《幻兽帕鲁》攻略:0基础入门及游戏基础操作。 如果想在苹果电脑玩《幻兽帕鲁》记得安装CrossOver哦。 以下纯干货: CrossOver正版安装包(免费试用):https://souurl.cn/Y1gDao 一、基础操作 二、界面…

Logback - 日志框架

引言 在当今的企业级应用开发中,日志管理是一个不可或缺的部分。它不仅帮助我们进行错误跟踪,还能有效监控应用程序的运行状态,为性能优化提供数据支撑。Spring Boot作为一个简化Spring应用开发的框架,自带了强大的日志管理功能。…

雾计算:去中心化计算的未来之旅

雾计算是去中心化计算的基石,它将重塑我们的数字格局。通过使计算和存储更接近数据源,它改变了我们处理物联网生成数据的方式。通过雾计算探索未来,揭示了减少延迟、增强隐私和高效网络利用等好处。 随着传感器和可穿戴设备等物联网设备的数…

【jQuery——详细讲解】

jQuery讲解 jQuery介绍 jQuery介绍 jQuery是一个快速、小巧且功能丰富的JavaScript库,它使得HTML文档遍历和操作、事件处理、动画和Ajax操作变得更简单,都是通过一个简洁的API来实现的,这个API在多种浏览器上都能正常工作。它的口号是“writ…

Unity UGUI实现点击事件穿透

代码很简单如下 将此代码挂载到上层节点上即可 using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems;public class ClickEventPenetration : MonoBehaviour, IPointerClickHandler {public void OnPointerClick(PointerEventData eventData…

PCIe学习笔记(1)Hot-Plug机制

文章目录 Hot-Plug InitHot Add FlowSurprise Remove FlowNPEM Flow Hot-Plug Init PCIe hot-plug是一种支持在不关机情况下从支持的插槽添加或删除设备的功能,PCIe架构定义了一些寄存器以支持原生热插拔。相关寄存器主要分布在Device Capabilities, Slot Capabili…

网站被攻击有什么办法呢?

最近,德迅云安全遇到不少网站用户遇到攻击问题,来咨询安全解决方案。目前在所有的网络攻击方式中,DDoS是最常见,也是最高频的攻击方式之一。不少用户网站上线后,经常会遭受到攻击的困扰。有些攻击持续时间比较短影响较…

MCU+SFU视频会议一体化,视频监控,指挥调度(AR远程协助)媒体中心解决方案。

视频互动应用已经是政务和协同办公必备系统,早期的分模块,分散的视频应该不能满足业务需要,需要把视频监控,会议,录存一体把视频资源整合起来,根据客户需求,需要能够多方视频互动,直…

cmake安装LAMMPS增加MOLECULE等package

使用cmake可以较make更加快捷的安装LAMMPS,关于官网上已有Cmake安装的详细教程: https://docs.lammps.org/Build_cmake.html 可是经过使用,发现默认的安装方式里只有最基础的包,甚至没有MOLECULE包 因此为了使用cmake来增加想要安装的包&a…

代码随想录算法训练营第29天|491.递增子序列 * * 46.全排列 * 47.全排列 II

文章目录 491.递增子序列思路:代码 思路:优化代码: 46.全排列思路代码一:使用used数组代码二:使用path判断元素 47.全排列 II思路一:层节点和路径都是用used数组做记录思路二:层通过排序后是否重…

学习Vue3的第一天

目录 简介 什么是 Vue? 创建Vue3工程 前提条件 基于 vue-cli 创建(不推荐) 基于 vite 创建(推荐) 通过 CDN 使用 Vue 代码示例 简介 什么是 Vue? Vue.js 是一个流行的前端 JavaScript 框架&#…

c# DataTable 帮助类

public class DataTableHelper { #region DataTable转IList /// <summary> /// DataTable转IList集合 /// </summary> /// <typeparam name"T"></typeparam> /// <param name"dataTabl…

linux查看公网地址

curl ifconfig.mewget -qO- ifconfig.me

用keytool 生成JWT的RSA非对称密钥

写在前面 JWT 令牌 可以由 X.509 证书或 256 位非对称密钥签名来充当&#xff0c;为了获得合法的JWT 令牌&#xff0c;我们可以使用JDK中的keytool.exe工具来生成。 本例的操作环境是Windows系统&#xff0c;操作的前置条件需要先安装好JDK&#xff0c;并配置好环境变量&…

C#的Char 结构的像IsLetterOrDigit(Char)等常见的方法

目录 一、Char 结构的方法 二、Char.IsLetterOrDigit 方法 1.Char.IsLetterOrDigit(Char)用法 2.IsLetterOrDigit(String, Int32)方法 三、Char.IsLetter 方法 1.IsLetter(Char) 2.IsLetter(String, Int32) 四、Char.IsDigit 方法 1. IsDigit(String, Int32) 2.IsDig…

Vue 学习随笔系列九 -- 表格中插入图片、背景、自定义表头

表格中插入图片和icon 文章目录 表格中插入图片和icon一、如何插入图片1、代码2、效果 二、文字添加背景1、代码2、效果 三、表头悬浮提示语四、表头添加图标 一、如何插入图片 1、代码 <template><div><el-tablesize"small"borderv-loading"l…

K8S部署Harbor镜像仓库(含离线安装包harbor-offline-installer国内下载链接)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…