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生产和消费的更多相关文章

  1. 使用docker搭建kafka环境

    Requirements 最近学习了下kafka,为方便搭建环境,使用docker进行部署. 需要首先安装docker的环境.要求操作系统是linux的64位系统. docker的安装(适于rpm/d ...

  2. Mac下docker搭建lnmp环境 + redis + elasticsearch

    之前在windows下一直使用vagrant做开发, 团队里面也是各种开发环境,几个人也没有统一环境,各种上线都是人肉,偶尔还会有因为开发.测试.生产环境由于软件版本或者配置不一致产生的问题, 今年准 ...

  3. mac下通过docker搭建LEMP环境

    在mac下通过docker搭建LEMP环境境 1.安装virtualbox.由于docker是在lxc环境的容器 2.安装boot2docker,用于与docker客户端通讯 > brew up ...

  4. 【Devops】【docker】【CI/CD】1.docker搭建Gitlab环境

    CI/CD[持续化集成/持续化交付] docker搭建Gitlab环境 1.查询并拉取gitlab镜像 docker search gitlab docker pull gitlab/gitlab-c ...

  5. docker搭建lnmp环境(问题,资料,命令)

    入门参考 http://www.runoob.com/docker/docker-install-nginx.html 十大常用命令玩转docker 1. #从官网拉取镜像 docker pull & ...

  6. Docker搭建disconf环境,三部曲之一:极速搭建disconf

    Docker下的disconf实战全文链接 <Docker搭建disconf环境,三部曲之一:极速搭建disconf>: <Docker搭建disconf环境,三部曲之二:本地快速构 ...

  7. Docker搭建disconf环境,三部曲之二:本地快速构建disconf镜像

    Docker下的disconf实战全文链接 <Docker搭建disconf环境,三部曲之一:极速搭建disconf>: <Docker搭建disconf环境,三部曲之二:本地快速构 ...

  8. Docker搭建disconf环境,三部曲之三:细说搭建过程

    Docker下的disconf实战全文链接 <Docker搭建disconf环境,三部曲之一:极速搭建disconf>: <Docker搭建disconf环境,三部曲之二:本地快速构 ...

  9. 使用Docker搭建apache环境

    Docker搭建apache环境 前言 操作机:ubuntu16 x64 Dockers servion 18.09.7 下载镜像 使用docker pull 拉取最新的 apache镜像 命令:do ...

随机推荐

  1. 精通awk系列(10):awk筛选行和处理字段的示例

    回到: Linux系列文章 Shell系列文章 Awk系列文章 awk数据筛选示例 筛选行 # 1.根据行号筛选 awk 'NR==2' a.txt # 筛选出第二行 awk 'NR>=2' a ...

  2. JS查找某个字符在字符串中出现的位置及次数

    var str = 'fdhfgcsaedvcfhgfh'; var index = str.indexOf('f'); // 字符出现的位置 var num = 0; // 这个字符出现的次数 wh ...

  3. 对java异常的总结及java项目中的常用的异常处理情况

    文章涉及内容来源:黑马程序员自学整理的笔记,网上查阅资料,以及转载名为墨钺的博客大佬,附上博客转载地址:https://www.cnblogs.com/gothic-death/p/9946415.h ...

  4. WestWild: 1.1: Vulnhub Walkthorugh

    启动界面 主机层面扫描: ╰─ nmap -p1-65535 -sV -A 10.10.202.131 Starting Nmap 7.70 ( https://nmap.org ) at 2019- ...

  5. C lang: The caracter reverse

    Ax_Code #include<stdio.h> int main(void) { int i; char string[7] = {"mrsoft"}; char ...

  6. QT执行shell脚本或者执行linux指令

    由于我在做linux下的QT开发,有时候会用到shell脚本的辅助,但是需要QT运行shell脚本并获取执行结果,今天给大家分享下我的技巧,废话少说直接上代码: //执行shell指令或者shell脚 ...

  7. MySQL 8.0部分弃用的参数整理

    最近整理了一下MySQL 8.0的自动化安装,其中用到了一个MySQL 5.7版本的自定义配置文件,由于没有对(MySQL 8.0)做针对性修改,导致安装过程中出现了一些错误其中部分原因就是MySQL ...

  8. [PHP] swoole直接使用二进制包

    swoole提供一个编译好的二进制包,这个包连php都包含进去了,下载解压后就可以直接运行,都不用安装php 在这个地方直接下载二进制包 https://www.swoole.com/page/dow ...

  9. Python selenium登录163邮箱示例

    思路:使用python自带的unittest单元测试框架测试163邮箱登录成功的case import unittestfrom selenium import webdriverimport tim ...

  10. luoguP1871 对撞机【赛后第一题

    题面 题目描述 在2312年,宇宙中发现了n台巨型对撞机,这些对撞机分别用1-n的自然数标识.科学家们不知道启动这些对撞机会发生什么危险事故,所以这些机器,刚开始都是出于关闭的状态. 随着科学家们的研 ...