zookeeper + kafka

首先要在 apche 官网下载 kafka 的程序包(linux版本),然后放到服务器上解压,得到以下目录

bin 目录下包含了服务的启动脚本

启动 zookeeper

./bin/zookeeper-server-start.sh config/zookeeper.properties

  

启动 kafka server

./bin/kafka-server-start.sh config/server.properties

创建一个主题

./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic cctv1(主题名)

  

启动生产者

./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic cctv1

启动消费者

./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic cctv1

如果要消费前面的数据,在启动时添加 --from-beginning 参数

./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic cctv1 --from-beginning

查看 kafka 进程命令:

jps

producer

安装 Sarama 包

go get github.com/Shopify/sarama

demo:创建生产者,往单节点的 kafka 上发送数据

package main
import (
"fmt"
"github.com/Shopify/sarama"
"time"
) //消息写入kafka
func main() {
//初始化配置
config := sarama.NewConfig()
config.Producer.RequiredAcks = sarama.WaitForAll
config.Producer.Partitioner = sarama.NewRandomPartitioner
config.Producer.Return.Successes = true
//生产者
client, err := sarama.NewSyncProducer([]string{"10.10.4.35:9092"}, config)
if err != nil {
fmt.Println("producer close,err:", err)
return
}
defer client.Close() for i:=0; i<5; i++ {
//创建消息
msg := &sarama.ProducerMessage{}
msg.Topic = "cctv1"
msg.Value = sarama.StringEncoder("this is a good test,hello kai")
//发送消息
pid, offset, err := client.SendMessage(msg)
if err != nil {
fmt.Println("send message failed,", err)
return
}
fmt.Printf("pid:%v offset:%v\n", pid, offset)
time.Sleep(time.Second)
}
}

运行结果:(上述代码执行一下,就会往 kafka 中 cctv1 的主题发布 5 条消息)

然后通过 kafka 自带的消费者终端查看发送的数据

./bin/kafka-console-consumer.sh --bootstrap-server 10.10.4.35:9092 --topic cctv1 --from-beginning

consumer

demo:创建消费者,从单节点的 kafka 中消费数据

package main
import (
"fmt"
"github.com/Shopify/sarama"
"sync"
) var wg sync.WaitGroup func main() {
consumer, err := sarama.NewConsumer([]string{"10.10.4.35:9092"}, nil)
if err != nil {
fmt.Println("consumer connect err:", err)
return
}
defer consumer.Close() //获取 kafka 主题
partitions, err := consumer.Partitions("cctv1")
if err != nil {
fmt.Println("get partitions failed, err:", err)
return
} for _, p := range partitions {
//sarama.OffsetNewest:从当前的偏移量开始消费,sarama.OffsetOldest:从最老的偏移量开始消费
partitionConsumer, err := consumer.ConsumePartition("cctv1", p, sarama.OffsetNewest)
if err != nil {
fmt.Println("partitionConsumer err:", err)
continue
}
wg.Add(1)
go func(){
for m := range partitionConsumer.Messages() {
fmt.Printf("key: %s, text: %s, offset: %d\n", string(m.Key), string(m.Value), m.Offset)
}
wg.Done()
}()
}
wg.Wait()
}

consumer 版本2

package kafkaPlugin
import (
"fmt"
"github.com/Shopify/sarama"
) type KafkaConsumer struct {
Node string
Topic string
//Message string
MessageQueue chan string
} func (this KafkaConsumer) Consume(){
consumer, err := sarama.NewConsumer([]string{this.Node}, nil)
if err != nil {
fmt.Printf("kafka connnet failed, error[%v]", err.Error())
return
}
defer consumer.Close() partitions, err := consumer.Partitions(this.Topic)
if err != nil {
fmt.Printf("get topic failed, error[%v]", err.Error())
return
}
for _, p := range partitions {
partitionConsumer, err := consumer.ConsumePartition(this.Topic, p, sarama.OffsetNewest)
if err != nil {
fmt.Printf("get partition consumer failed, error[%v]", err.Error())
continue
} for message := range partitionConsumer.Messages() {
fmt.Printf("message:[%v], key:[%v], offset:[%v]\n", string(message.Value), string(message.Key), string(message.Offset))
this.MessageQueue <- string(message.Value)
}
}
} func main(){
var kafkaConsumer = KafkaConsumer{
Node: "10.10.4.35:9092",
Topic: "cctv1",
}
kafkaConsumer.Consume()
}

上述代码执行起来,就会开启 kafka 消费者持续监听,然后通过 kafka 自带的生产者终端发送 2 条测试数据,消费结果如下:

windows 环境,运行编译错误:exec: "gcc": executable file not found in %PATH%

问题处理请参考下面的链接:

https://blog.csdn.net/myBarbara/article/details/95358694

https://www.cnblogs.com/ggg-327931457/p/9694516.html

ending ~

Go 关于 kafka 的生产者、消费者实例的更多相关文章

  1. Linux 进程间通信(包含一个经典的生产者消费者实例代码)

    前言:编写多进程程序时,有时不可避免的需要在多个进程之间传递数据,我们知道,进程的用户的地址空间是独立,父进程中对数据的修改并不会反映到子进程中,但内核是共享的,大多数进程间通信方式都是在内核中建立一 ...

  2. Go语言协程并发---生产者消费者实例

    package main import ( "fmt" "strconv" "time" ) /* 改进生产者消费者模型 ·生产者每秒生产一 ...

  3. 基于Kafka的生产者消费者消息处理本地调试

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/68174111冷血之心的博客) Kafka下载地址:http://d ...

  4. Hadoop生态圈-Kafka的旧API实现生产者-消费者

    Hadoop生态圈-Kafka的旧API实现生产者-消费者 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.旧API实现生产者-消费者 1>.开启kafka集群 [yinz ...

  5. Java实现Kafka的生产者和消费者例子

    Kafka的结构与RabbitMQ类似,消息生产者向Kafka服务器发送消息,Kafka接收消息后,再投递给消费者.生产者的消费会被发送到Topic中,Topic中保存着各类数据,每一条数据都使用键. ...

  6. Scala调用Kafka的生产者和消费者Demo,以及一些配置参数整理

    kafka简介 Kafka是apache开源的一款用Scala编写的消息队列中间件,具有高吞吐量,低延时等特性. Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受 ...

  7. Python 使用python-kafka类库开发kafka生产者&消费者&客户端

    使用python-kafka类库开发kafka生产者&消费者&客户端   By: 授客 QQ:1033553122       1.测试环境 python 3.4 zookeeper- ...

  8. Hadoop生态圈-Kafka的新API实现生产者-消费者

         Hadoop生态圈-Kafka的新API实现生产者-消费者 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  9. Kafka 简单实验二(Python实现简单生产者消费者)

    Apache Kafka 是什么? Kafka 是一个开源的分布式流处理平台,其简化了不同数据系统的集成.流指的是一个数据管道,应用能够通过流不断地接收数据.Kafka 作为流处理系统主要有两个用处: ...

  10. centos7单机安装kafka,进行生产者消费者测试

    [转载请注明]: 原文出处:https://www.cnblogs.com/jstarseven/p/11364852.html   作者:jstarseven    码字挺辛苦的.....  一.k ...

随机推荐

  1. 使用layui框架的select获取选中的值

    在使用时需要注意:select标签的外层需要加上类名".layui-form" 接下来就是根据需求来改变下拉框的内容了,直接给select的option重新赋一次值,记得加上对应的 ...

  2. AndoridSQLite数据库开发基础教程(7)

    AndoridSQLite数据库开发基础教程(7) 为空表添加数据 开发者可以单击Data按钮,看到Students表中是没有数据的,创建好的Students表是一个空表.如图1.15所示.如果开发者 ...

  3. Postgresql常用函数整理

    一.字符串函数 1.函数:string || string(string || non-string) 说明:字符串(或与非字符串)连接 示例: 2.函数:char_length(string) 说明 ...

  4. Python 相对导入attempted relative import beyond top-level package

    ValueError: attempted relative import beyond top-level package 假设有如下层次包目录 project/ __init__.py mypac ...

  5. [译]如何将dataframe的两列结合起来?

    我用pandas生成了一个20 x 4000的dataframe.其中两列名为Year和quarter.我想创建一个名为period的变量,将Year = 2000和quarter = q2变为200 ...

  6. /var/spool/postfix

    centos磁盘优化,发现/var/spool/postfix/maildrop下有大量文件. cron进程默认会将计划任务中所运行的脚本的警告.错误信息或者脚本输出信息发送给计划任务的所有者,而由于 ...

  7. LM_ReadImgMode.js PC单页轮播读图模式组件,零依赖!

    LM_ReadImgMode.js PC单页轮播读图模式组件,零依赖! github:http://dtdxrk.github.io/LM-ReadImgMode/ TXT 1.全新的2.0版本,脱离 ...

  8. idea安装svn

    idea不像eclipse那样是用插件,idea是直接指向已经安装好的svn.exe.

  9. 问题(一)升级Appium最新遇到滑动的坑

    Appium的JAVA客户端更新到java-client 6.0.0-BETA3后,发现其中有关于界面滑动(swipe TouchAction)方面的升级(也有可能在之前的版本已经更新过类似的内容,没 ...

  10. certutil在传输payload中的新奇技巧

    好久没更新博客了,最近在实习的过程中还是见识到不少东西. 不多说,直接开始正文. 首先说一下certutil在渗透测试中用到的特别多,下载文件,计算hash,以及base64编码等等. 在这里介绍ba ...