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. tomcat中设置Java 客户端程序的http(https)访问代理

    1.假定http/https代理服务器为 127.0.0.1 端口为8118 2.在tomcat/bin/catalina.sh脚本文件中设置JAVA_OPTS,如下图: 保存后重启tomcat就能生 ...

  2. ansible常用的方法小结

    一.批量安装zabbix客户端 .拷贝sh脚本和.conf到远程服务器(也可以全量拷贝客户端) ansible all -m copy -a "src=/usr/local/zabbix_a ...

  3. java 数据相除

    编程的人都知道,java中的“/”.“%”运算,其中前者为取整,后者取余数.那么有没有快捷的运算方法取正常的运算结果呢? /** * TODO 除法运算,保留小数 * @author 袁忠明 * @d ...

  4. Hadoop记录-部署hadoop环境shell实现

    #!/bin/bash menu() { echo "---欢迎使用hadoop部署管理程序---" echo "# 1.初始化Linux环境" echo &q ...

  5. Laya的屏幕适配,UI组件适配

    参考: 屏幕适配API概述 版本2.1.1.1 目录 一 适配模式 二 UI组件适配 一 适配模式 基本和白鹭的适配模式一样. Laya官方也推荐了竖屏使用fiexedwidth,横屏使用fixedh ...

  6. matlab学习笔记1--matlab工作界面

    一起来学matlab-matlab学习笔记1--matlab工作界面 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 感谢 ...

  7. Hive开启mapjoin优化、并行执行、动态分区

    1. mapjoin优化适合小表join大表 set hive.optimize.skewjoin=true; //有数据倾斜时开启负载均衡,默认false set hive.auto.convert ...

  8. mybatis 存储过程与游标的使用

    MyBatis还能对存储过程进行完全支持,这节开始学习存储过程.在讲解之前,我们需要对存储过程有一个基本的认识,首先存储过程是数据库的一个概念,它是数据库预先编译好,放在数据库内存中的一个程序片段,所 ...

  9. LINUX 安装 VMware-Tools(附常见问题)

    mkdir /cdrom #创建光驱挂载目录 mount /dev/cdrom /cdrom # 加载光驱 tar -zxvf /cdro/VMwareTools**********.tar.gz ~ ...

  10. c# stmp邮件发送

    最近用到了邮件发送功能,因为stmp设置.参数传递错误等一些问题走了弯路,虽然代码很简单,这里还是记录一下,方便下次查阅. 用个人163邮箱测试的邮件发送 class Program { static ...