在很多时候我们需要使用到消息队列, 其中 kafka 是一个非常优秀的消息队列, 在我们平时开发中也经常会用到, 但是在开发环境中部署 kafka 是一个非常麻烦的事情

在 kafka 官网上, 有一个详细的部署文档, 需要的小伙伴可以参考这个文档 https://kafka.apache.org/quickstart, 但是随之带来的问题是, 我们需要 java 环境, 并且需要安装 zookerper,

那么如果我仅仅是想本地开发环境中使用 kafka, 有没有更简单的方法呢? 为了解决这个问题, 我们可以使用 docker 来部署 kafka

使用 docker 来部署 kafka 的测试节点, 我们需要先安装 docker 和 docker-compose, 这里就不再赘述了, 请自行安装

首先我们在已经安装好 docker 和 docker-compose 的机器上, 创建一个目录, 并且在这个目录下创建一个 docker-compose.yml 文件, 文件内容如下

version: "2"

services:
kafka:
image: docker.io/bitnami/kafka:3.6
ports:
- '9094:9094'
volumes:
- "kafka_data:/bitnami"
environment:
# KRaft settings
- KAFKA_CFG_NODE_ID=0
- KAFKA_CFG_PROCESS_ROLES=controller,broker
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093
# Listeners
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://:9094
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,EXTERNAL://localhost:9094
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT
volumes:
kafka_data:
driver: local

然后我们就可以在这个目录下执行 docker-compose up -d 来启动 kafka 了, 启动完成后, 我们可以使用 docker ps 命令来查看 kafka 是否启动成功

➜  ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f346c045196d bitnami/kafka:3.6 "/opt/bitnami/script…" 2 days ago Up 2 days 0.0.0.0:9092-9094->9092-9094/tcp, :::9092-9094->9092-9094/tcp

此时需要注意打开防火墙限制, 例如我的防火墙使用的是 ufw , 我们需要执行以下命令

ufw allow 9094

然后我们就可以使用 kafka 了, 例如我现在使用 python 来连接 kafka, 首先我们需要安装 kafka-python

import time

from kafka import KafkaConsumer

consumer = KafkaConsumer('test',
group_id='test',
bootstrap_servers=['x.x.x.x:9094'])
for message in consumer:
print(time.time(), "%s:%d:%d: key=%s value=%s" % (message.topic, message.partition,
message.offset, message.key,
message.value))
from kafka import KafkaProducer

producer = KafkaProducer(bootstrap_servers=['x.x.x.x:9094'])

# Asynchronous by default
future = producer.send('test', b'raw_bytes')
producer.flush()

欢迎访问我的个人博客 https://blog.twotigers.xyz/posts/kafka/

使用 docker 部署 kafka的更多相关文章

  1. [转]【kafka】用 Docker 部署 Kafka

    ref : https://www.jianshu.com/p/7635ea96e53f 用 Docker 部署 Kafka   Kafka 简介 作为一个消息中间件,Kafka 以高扩展性.高吞吐量 ...

  2. 转 docker 部署 kafka

    原文链接 http://blog.csdn.net/snowcity1231/article/details/54946857 -e KAFKA_BROKER_ID=1 -e ZK=zk -p 909 ...

  3. Docker部署kafka|Go操作实践

    前言 写作本文的背景是由于字节的暑期青训营中,某个项目要求编写一个简易的流处理引擎(flink),开发语言不限,推荐Java,本着好奇心的驱使,我打算使用Go语言进行部分尝试. 既然是流处理引擎,那么 ...

  4. docker部署kafka集群

    利用docker可以很方便的在一台机子上搭建kafka集群并进行测试.为了简化配置流程,采用docker-compose进行进行搭建. kafka搭建过程如下: 编写docker-compose.ym ...

  5. Docker部署Kafka以及Spring Kafka操作

    从https://hub.docker.com/ 查找kafka 第三个活跃并stars数量多 进去看看使用 我们使用docker-compose来构建镜像 查看使用文档中的docker-compos ...

  6. 【原创】运维基础之Docker(2)通过docker部署zookeeper nginx tomcat redis kibana/elasticsearch/logstash mysql kafka mesos/marathon

    通过docker可以从头开始构建集群,也可以将现有集群(配置以及数据)平滑的迁移到docker部署: 1 docker部署zookeeper # usermod -G docker zookeeper ...

  7. 基于Docker的Kafka部署

    一 准备 1.1 安装docker-dompose #部署 sudo curl -L "https://github.com/docker/compose/releases/download ...

  8. 生产环境Docker部署ELK跨区访问kafka不通问题的解决

    由于分布式系统的日志集中采集的需求非常强烈,我们组通过调研和实践搭建了一套基于Docker的日志收集系统Amethyst. 我们首先在测试环境搭建了一套基于Docker swarm集群的ELK分布式环 ...

  9. Docker部署zookeeper集群和kafka集群,实现互联

    本文介绍在单机上通过docker部署zookeeper集群和kafka集群的可操作方案. 0.准备工作 创建zk目录,在该目录下创建生成zookeeper集群和kafka集群的yml文件,以及用于在该 ...

  10. 基于Kubernetes在AWS上部署Kafka时遇到的一些问题

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 交代一下背景:我们的后台系统是一套使用Kafka消息队列的数据处理管线 ...

随机推荐

  1. HomeBrew 安装 Maven 及其 IDEA 配置

    Brew 安装 Maven brew search maven # 使用搜索工具去搜索maven包 brew info maven #使用info查看maven包当前的信息情况,包括版本依赖描述等 b ...

  2. POJ - 2259 Team Queue (队列)

    题目链接 https://vjudge.net/problem/POJ-2259 题解 在任何时刻,同一个小组的人只要来到了队伍,就会站在一起,所以我们建立一个队列q0存储队伍中所有小组的编号,再为每 ...

  3. 每天学五分钟 Liunx 0000 | 存储篇:GlusterFS

    GlusterFS GlusterFS,是一个分布式文件系统,它通过 TCP/IP 或 IB(InfiniBand RDMA)网络将多个存储资源整合在一起,提供存储服务,具有很强的可扩展能力.   G ...

  4. 面试官:Redis持久化能关吗?怎么关?

    数据持久化是指将数据从内存中,保存到磁盘或其他持久存储介质的过程,这样做的目的是为了保证数据不丢失. 而 Redis 的持久化功能默认是开启的,这样做的目的也是为了保证程序的稳定性(防止缓存雪崩.缓存 ...

  5. Keep English Level-03

    rule -- 统治,管理,规章,制度 ruling -- 裁决 ruler -- 统治者,尺子 district judge -- 地方法官 sweeping -- 一刀切的 haul --拉 ov ...

  6. 【MicroPython】用 c 添加接口 -- 添加 type

    [来源]https://www.eemaker.com/micropython-type.html

  7. 【STM32】如何将资源烧写至外部flash,如spi-flash

    STM32将资源烧写至外部flash方式大致分为通过IDE与应用程序一起和通过CubeProgranmmer单独烧写两种: 方式一.使用IDE加载烧写算法,烧录应用程序时一并写入,具体就是修改分散加载 ...

  8. [转帖]TiFlash DeltaTree 存储引擎设计及实现分析 - Part 1

    https://tidb.net/book/book-rush/features/tiflash-code/tiflash-deltatree TiFlash 是 TiDB 的分析引擎,是 TiDB ...

  9. [转帖]TiDB Lightning 在数据迁移中的应用与错误处理实践

    TiDB Lightning 在数据迁移中的应用与错误处理实践 作者简介:DBA,会点 MySQL,懂点 TiDB,Python. 个人主页:https://tidb.net/u/seiang/ans ...

  10. [转帖]TiDB 整体架构

    https://docs.pingcap.com/zh/tidb/stable/tidb-architecture 与传统的单机数据库相比,TiDB 具有以下优势: 纯分布式架构,拥有良好的扩展性,支 ...