”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 连接 Kafka 和 Golang

连接 Kafka 和 Golang

发布于2024-11-04
浏览:125

介绍

如果您需要了解 Kafka 的基础知识,例如它的主要功能、组件和优势,我在这里有一篇文章对此进行了介绍。请查看它并按照步骤操作,直到使用 Docker 完成 Kafka 安装,然后继续以下部分。

Connect Kafka with Golang

使用 Golang 连接到 Kafka

KafkaNodeJS连接的文章中的示例类似,该源码也包括两部分:初始化一个生产者 发送 消息Kafka 并使用 消费者 订阅来自 [ 的消息&&&]话题

我将把代码分解成更小的部分以便更好地理解。首先,让我们定义变量值。


包主 进口 ( “FMMT” “github.com/confluenceinc/confluence-kafka-go/kafka” ) 变量( 经纪人=“本地主机:9092” groupId = "组 ID" 主题 =“主题名称” )
package main

import (
  "fmt"
  "github.com/confluentinc/confluent-kafka-go/kafka"
)

var (
  broker  = "localhost:9092"
  groupId = "group-id"
  topic   = "topic-name"
)
-这里,包

github.com/confluenceinc/confluence-kafka-go/kafka用于连接到Kafka

-

经纪商是主机地址;如果您使用ZooKeeper,请相应地替换主机地址。

-

groupIdtopic可以根据需要更改。

接下来是初始化生产者。


func startProducer() { p, err := kafka.NewProducer(&kafka.ConfigMap{"bootstrap.servers": 代理}) 如果错误!= nil { 恐慌(错误) } 去函数(){ for e := 范围 p.Events() { 开关 ev := e.(类型) { 案例*kafka.消息: 如果 ev.TopicPartition.Error != nil { fmt.Printf("传送失败:%v\n", ev.TopicPartition) } 别的 { fmt.Printf("已将消息发送至 %v\n", ev.TopicPartition) } } } }() for _, word := range []string{"消息 1", "消息 2", "消息 3"} { p.Produce(&kafka.Message{ TopicPartition: kafka.TopicPartition{主题: &topic, 分区: kafka.PartitionAny}, 值:[]字节(字), },无) } }
package main

import (
  "fmt"
  "github.com/confluentinc/confluent-kafka-go/kafka"
)

var (
  broker  = "localhost:9092"
  groupId = "group-id"
  topic   = "topic-name"
)
上面的代码用于将消息数组

{"message 1", "message 2", "message 3"} 发送到主题并使用 go-routinefor e := range p.Events() 迭代事件并打印出传递结果,无论是成功或失败。

下一步是创建一个

消费者订阅主题并接收消息

func startConsumer() { c, err := kafka.NewConsumer(&kafka.ConfigMap{ “bootstrap.servers”:经纪人, "group.id": 组ID, "auto.offset.reset": "最早", }) 如果错误!= nil { 恐慌(错误) } c.订阅(主题,nil) 为了 { 消息,错误:= c.ReadMessage(-1) 如果错误==零{ fmt.Printf("%s 上的消息:%s\n", msg.TopicPartition, string(msg.Value)) } 别的 { fmt.Printf("消费者错误: %v (%v)\n", err, msg) 休息 } } c.关闭() }
package main

import (
  "fmt"
  "github.com/confluentinc/confluent-kafka-go/kafka"
)

var (
  broker  = "localhost:9092"
  groupId = "group-id"
  topic   = "topic-name"
)
最后,由于这是一个简单的示例,因此调用函数创建

生产者消费者以供使用。在现实场景中,生产者消费者的部署通常在微服务系统中的两个不同服务器上完成。

func main() { 启动生产者() 启动消费者() }
package main

import (
  "fmt"
  "github.com/confluentinc/confluent-kafka-go/kafka"
)

var (
  broker  = "localhost:9092"
  groupId = "group-id"
  topic   = "topic-name"
)

Connect Kafka with Golang

编码愉快!


如果您觉得本文内容有帮助,请访问我博客上的原文,支持作者,探索更多有趣的内容。

Connect Kafka with GolangConnect Kafka with GolangConnect Kafka with GolangConnect Kafka with GolangConnect Kafka with Golang


您可能会感兴趣的一些系列:

    NodeJS
  •  反应
  • Docker 
  • Kubernetes
版本声明 本文转载于:https://dev.to/chauhoangminhnguyen/connect-kafka-with-golang-3h4d?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 对象拟合:IE和Edge中的封面失败,如何修复?
    对象拟合:IE和Edge中的封面失败,如何修复?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    编程 发布于2025-04-09
  • 找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    如何在mySQL中使用mySql 检索最大计数,您可能会遇到一个问题,您可能会在尝试使用以下命令:理解错误正确找到由名称列分组的值的最大计数,请使用以下修改后的查询: 计数(*)为c 来自EMP1 按名称组 c desc订购 限制1 查询说明 select语句提取名称列和每个名称...
    编程 发布于2025-04-09
  • HTML格式标签
    HTML格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2025-04-09
  • 如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    使用http request 上传文件上传到http server,同时也提交其他参数,java.net.net.urlconnection and Multipart/form-data Encoding是普遍的。 Here's a breakdown of the process:Mu...
    编程 发布于2025-04-09
  • 如何实时捕获和流媒体以进行聊天机器人命令执行?
    如何实时捕获和流媒体以进行聊天机器人命令执行?
    在开发能够执行命令的chatbots的领域中,实时从命令执行实时捕获Stdout,一个常见的需求是能够检索和显示标准输出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    编程 发布于2025-04-09
  • 为什么不使用CSS`content'属性显示图像?
    为什么不使用CSS`content'属性显示图像?
    在Firefox extemers属性为某些图像很大,&& && && &&华倍华倍[华氏华倍华氏度]很少见,却是某些浏览属性很少,尤其是特定于Firefox的某些浏览器未能在使用内容属性引用时未能显示图像的情况。这可以在提供的CSS类中看到:。googlepic { 内容:url(&#...
    编程 发布于2025-04-09
  • 如何在其容器中为DIV创建平滑的左右CSS动画?
    如何在其容器中为DIV创建平滑的左右CSS动画?
    通用CSS动画,用于左右运动 ,我们将探索创建一个通用的CSS动画,以向左和右移动DIV,从而到达其容器的边缘。该动画可以应用于具有绝对定位的任何div,无论其未知长度如何。问题:使用左直接导致瞬时消失 更加流畅的解决方案:混合转换和左 [并实现平稳的,线性的运动,我们介绍了线性的转换。这...
    编程 发布于2025-04-09
  • 哪种在JavaScript中声明多个变量的方法更可维护?
    哪种在JavaScript中声明多个变量的方法更可维护?
    在JavaScript中声明多个变量:探索两个方法在JavaScript中,开发人员经常遇到需要声明多个变量的需要。对此的两种常见方法是:在单独的行上声明每个变量: 当涉及性能时,这两种方法本质上都是等效的。但是,可维护性可能会有所不同。 第一个方法被认为更易于维护。每个声明都是其自己的语句,使其...
    编程 发布于2025-04-09
  • 可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    [2这里: https://webthemez.com/demo/sticky-multi-header-scroll/index.html </main> <section> { display:grid; grid-template-...
    编程 发布于2025-04-09
  • 如何使用Python理解有效地创建字典?
    如何使用Python理解有效地创建字典?
    在python中,词典综合提供了一种生成新词典的简洁方法。尽管它们与列表综合相似,但存在一些显着差异。与问题所暗示的不同,您无法为钥匙创建字典理解。您必须明确指定键和值。 For example:d = {n: n**2 for n in range(5)}This creates a dicti...
    编程 发布于2025-04-09
  • 您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    在javascript console 中显示颜色是可以使用chrome的控制台显示彩色文本,例如红色的redors,for for for for错误消息?回答是的,可以使用CSS将颜色添加到Chrome和Firefox中的控制台显示的消息(版本31或更高版本)中。要实现这一目标,请使用以下模...
    编程 发布于2025-04-09
  • 如何处理PHP文件系统功能中的UTF-8文件名?
    如何处理PHP文件系统功能中的UTF-8文件名?
    在PHP的Filesystem functions中处理UTF-8 FileNames 在使用PHP的MKDIR函数中含有UTF-8字符的文件很多flusf-8字符时,您可能会在Windows Explorer中遇到comploreer grounder grounder grounder gro...
    编程 发布于2025-04-09
  • 如何干净地删除匿名JavaScript事件处理程序?
    如何干净地删除匿名JavaScript事件处理程序?
    删除匿名事件侦听器将匿名事件侦听器添加到元素中会提供灵活性和简单性,但是当要删除它们时,可以构成挑战,而无需替换元素本身就可以替换一个问题。 element? element.addeventlistener(event,function(){/在这里工作/},false); 要解决此问题,请考虑...
    编程 发布于2025-04-09
  • Android如何向PHP服务器发送POST数据?
    Android如何向PHP服务器发送POST数据?
    在android apache httpclient(已弃用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    编程 发布于2025-04-09
  • \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    答案: 在大多数现代编译器中,while(1)和(1)和(;;)之间没有性能差异。编译器: perl: 1 输入 - > 2 2 NextState(Main 2 -E:1)V-> 3 9 Leaveloop VK/2-> A 3 toterloop(next-> 8 last-> 9 ...
    编程 发布于2025-04-09

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3