docker搭建kafka环境&&Golang生产和消费
docker 搭建kafka环境
version: '2'
services:
zk1:
image: confluentinc/cp-zookeeper:latest
hostname: zk1
container_name: zk1
restart: always
ports:
- "12181:2181"
environment:
ZOOKEEPER_SERVER_ID: 1
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_SERVERS: zk1:12888:13888;zk2:22888:23888;zk3:32888:33888
zk2:
image: confluentinc/cp-zookeeper:latest
hostname: zk2
container_name: zk2
restart: always
ports:
- "22181:2181"
environment:
ZOOKEEPER_SERVER_ID: 2
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_SERVERS: zk1:12888:13888;zk2:22888:23888;zk3:32888:33888
zk3:
image: confluentinc/cp-zookeeper:latest
hostname: zk3
container_name: zk3
restart: always
ports:
- "32181:2181"
environment:
ZOOKEEPER_SERVER_ID: 3
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_SERVERS: zk1:12888:13888;zk2:22888:23888;zk3:32888:33888
kafka1:
image: confluentinc/cp-kafka:latest
hostname: kafka1
container_name: kafka1
restart: always
ports:
- "9092:9092"
depends_on:
- zk1
- zk2
- zk3
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zk1:2181,zk2:2181,zk3:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9092
kafka2:
image: confluentinc/cp-kafka:latest
hostname: kafka2
container_name: kafka2
restart: always
ports:
- "9093:9093"
depends_on:
- zk1
- zk2
- zk3
environment:
KAFKA_BROKER_ID: 2
KAFKA_ZOOKEEPER_CONNECT: zk1:2181,zk2:2181,zk3:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:9093
kafka3:
image: confluentinc/cp-kafka:latest
hostname: kafka3
container_name: kafka3
restart: always
ports:
- "9094:9094"
depends_on:
- zk1
- zk2
- zk3
environment:
KAFKA_BROKER_ID: 3
KAFKA_ZOOKEEPER_CONNECT: zk1:2181,zk2:2181,zk3:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka3:9094
创建topic
partitions为2个,replication有3个,topic的name为test_kafka
//创建topic
kafka-topics --zookeeper zk1:2181,zk2:2181,zk3:2181 --replication-factor 3 --partitions 2 --create --topic test_kafka .
//查看topic
kafka-topics --zookeeper zk1:2181,zk2:2181,zk3:2181 --describe --topic test_kafka
消费kafka数据
import (
"context"
"flag"
"log"
"github.com/segmentio/kafka-go"
)
const (
kafkaConn1 = "127.0.0.1:9092"
kafkaConn2 = "127.0.0.1:9093"
kafkaConn3 = "127.0.0.1:9094"
)
var (
topic = flag.String("t", "test_kafka", "kafka topic")
group = flag.String("g", "test-group", "kafka consumer group")
)
func main() {
flag.Parse()
config := kafka.ReaderConfig{
Brokers: []string{kafkaConn1, kafkaConn2, kafkaConn3},
Topic: *topic,
MinBytes: 1e3,
MaxBytes: 1e6,
GroupID: *group,
}
reader := kafka.NewReader(config)
ctx := context.Background()
for {
msg, err := reader.FetchMessage(ctx)
if err != nil {
log.Printf("fail to get msg:%v", err)
continue
}
log.Printf("msg content:topic=%v,partition=%v,offset=%v,content=%v",
msg.Topic, msg.Partition, msg.Offset, string(msg.Value))
err = reader.CommitMessages(ctx, msg)
if err != nil {
log.Printf("fail to commit msg:%v", err)
}
}
}
生产kafka数据
import (
"bufio"
"context"
"fmt"
"os"
"github.com/segmentio/kafka-go"
)
const (
kafkaConn1 = "127.0.0.1:9092"
kafkaConn2 = "127.0.0.1:9093"
kafkaConn3 = "127.0.0.1:9094"
topic = "test_kafka"
)
var brokerAddrs = []string{kafkaConn1, kafkaConn2, kafkaConn3}
func main() {
// read command line input
reader := bufio.NewReader(os.Stdin)
writer := newKafkaWriter(brokerAddrs, topic)
defer writer.Close()
for {
fmt.Print("Enter msg: ")
msgStr, _ := reader.ReadString('\n')
msg := kafka.Message{
Value: []byte(msgStr),
}
err := writer.WriteMessages(context.Background(), msg)
if err != nil {
fmt.Println(err)
}
}
}
//消息分发策略默认使用轮训策略
func newKafkaWriter(kafkaURL []string, topic string) *kafka.Writer {
return kafka.NewWriter(kafka.WriterConfig{
Brokers: kafkaURL,
Topic: topic,
})
}
参考
http://zhongmingmao.me/2018/10/08/kafka-install-cluster-docker/
https://leel0330.github.io/golang/在go中使用kafka/
docker搭建kafka环境&&Golang生产和消费的更多相关文章
- 使用docker搭建kafka环境
Requirements 最近学习了下kafka,为方便搭建环境,使用docker进行部署. 需要首先安装docker的环境.要求操作系统是linux的64位系统. docker的安装(适于rpm/d ...
- Mac下docker搭建lnmp环境 + redis + elasticsearch
之前在windows下一直使用vagrant做开发, 团队里面也是各种开发环境,几个人也没有统一环境,各种上线都是人肉,偶尔还会有因为开发.测试.生产环境由于软件版本或者配置不一致产生的问题, 今年准 ...
- mac下通过docker搭建LEMP环境
在mac下通过docker搭建LEMP环境境 1.安装virtualbox.由于docker是在lxc环境的容器 2.安装boot2docker,用于与docker客户端通讯 > brew up ...
- 【Devops】【docker】【CI/CD】1.docker搭建Gitlab环境
CI/CD[持续化集成/持续化交付] docker搭建Gitlab环境 1.查询并拉取gitlab镜像 docker search gitlab docker pull gitlab/gitlab-c ...
- docker搭建lnmp环境(问题,资料,命令)
入门参考 http://www.runoob.com/docker/docker-install-nginx.html 十大常用命令玩转docker 1. #从官网拉取镜像 docker pull & ...
- Docker搭建disconf环境,三部曲之一:极速搭建disconf
Docker下的disconf实战全文链接 <Docker搭建disconf环境,三部曲之一:极速搭建disconf>: <Docker搭建disconf环境,三部曲之二:本地快速构 ...
- Docker搭建disconf环境,三部曲之二:本地快速构建disconf镜像
Docker下的disconf实战全文链接 <Docker搭建disconf环境,三部曲之一:极速搭建disconf>: <Docker搭建disconf环境,三部曲之二:本地快速构 ...
- Docker搭建disconf环境,三部曲之三:细说搭建过程
Docker下的disconf实战全文链接 <Docker搭建disconf环境,三部曲之一:极速搭建disconf>: <Docker搭建disconf环境,三部曲之二:本地快速构 ...
- 使用Docker搭建apache环境
Docker搭建apache环境 前言 操作机:ubuntu16 x64 Dockers servion 18.09.7 下载镜像 使用docker pull 拉取最新的 apache镜像 命令:do ...
随机推荐
- C#中的Skip()和Take()
Skip()和Take()方法都是IEnumerable<T> 接口的扩展方法,包括C#中的所有Collections类,如ArrayList,Queue,Stack等等,还有数组和字符串 ...
- Linux创建Jenkins启动脚本以及开机启动服务
1.jenkins.sh #!/bin/bash ###主要目的用于开机启动服务,不然 启动jenkins.war包没有java -jar的权限 JAVA_HOME=/usr/lib/jdk1.8.0 ...
- SAP QM 检验批里某检验特性的取样数量跟检验计划设置不符?
SAP QM 检验批里某检验特性的取样数量跟检验计划设置不符? 如下检验批号 890000045939, 结果录入界面,第二个特性里,取样数量是50个.实际上,该检验批对应的检验计划里, 采样过程L- ...
- 网站后台getshell
phpmyadmin后台Getshell 获取 web 绝对路径 select @@basedir; 检测是否有写入权限 show global variables like 'secure%' ## ...
- Hyper-V “SP2019SER”无法更改状态。操作失败,错误代码为“32788”。
卸载Hyper-V,然后重装,再重启已有的Hyper-V服务器,报错如下: 尝试启动选定的虚拟机时出错.“SP2019SER”无法更改状态. 原因:卸载后导致虚拟网卡出现问题导致的. 解决办法: 右击 ...
- VMware安装Linux提示此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态
问题: 原因: 这是由于没有开启虚拟技术导致的. 解决: 进入电脑BIOS设置,将"Inter Virtual Technology"设置为"Enabled", ...
- iconv转换
/////////////////////////////////////////////////////// #include <iconv.h> #include <stdlib ...
- Ubuntu18.04 卸载mysql5.7
查看MySQL的依赖项:dpkg --list|grep mysql 要删除上面的这些. 开始卸载: sudo apt-get autoremove --purge mysql-server sudo ...
- 数组中重复的数字(剑指offer_3)
在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次.请找出数组中任意一个重复的数字. Input: {2,3,1,0 ...
- 用二进制写程序,提升装 X 境界
用二进制来写程序这么反人类的事情,的确是很装的事情,但是它不但是一件很装的事情,也是掌握底层知识的基础能力之一.听我慢慢道来. 程序设计语言有高级语言和低级语言之分,尤其是现在各种编程语言的不断发展, ...