IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> docker-compose部署kafka集群 -> 正文阅读

[大数据]docker-compose部署kafka集群

本文简单介绍下如何通过docker-compose部署kafka集群。

前提准备

需要提前安装好 docker 和 docker-compose

下载镜像

众所周知,kafka 依赖于 zookeeper,所以需要还安装 zookeeper,这里将 zookeeper 和 kafka 镜像都拉取下来。

# 查找 zookeeper 镜像
docker search zookeeper

# 下载 zookeeper 镜像
docker pull zookeeper

# 查找 kafka 镜像
docker search kafka

# 下载 kafka 镜像中星星最多的那个镜像
docker pull wurstmeister/kafka

wurstmeister/kafka 镜像的 dockerhub?地址:https://hub.docker.com/r/wurstmeister/kafka。这里也有简易的教程可以参考,不过是英文的。

目录结构

/data/docker-compose
? ? docker-compose.yml
? ? | kafka
? ? ? ? | broker1/logs
? ? ? ? | broker2/logs
? ? ? ? | broker3/logs

部署 zookeeper

部署 zookeeper 极其简单(这里就不部署集群了),配置如下:

version: '3'
services:
  zookeeper:
    image: zookeeper
    ports:
      - 2182:2181
    restart: always

然后执行 docker-compose up -d --build zookeeper,就启动了 zookeeper。

zookeeper 地址为:10.68.4.1:2182

编写 docker-compose.yml

我希望集群中有3个borker,topic?的分区数为3,每个分区有2个副本

参数规则

通过 docker-compose 和 wurstmeister/kafka 镜像部署 kafka 时,最重要的就是 environment 参数的配置。

如果是直接在宿主机上部署 kafka,那我们直接在配置文件中修改对应的参数就行了,但是这里有一些不同。

下面是参数规则的说明:

从红框中的内容可以看出,要配置一个 kafka 参数,那在 docker-compose.yml 的 environment 中,需要在参数前加上 "KAFKA_" 前缀,并把 kafka 参数转大写,然后将?"." 替换成 "_"??

例如参数 zookeeper.connect ,在 docker-compose 中就是:KAFKA_ZOOKEEPER_CONNECT

最终配置

所以 docker-compose-yml 中配置了3个服务:kafka1,kafka2,kafka3。各自在宿主机上的端口分别为 9093,9094,9095。

version: '3'
services:
  zookeeper:
    image: zookeeper
    ports:
      - 2182:2181
    restart: always
  
  kafka1:
    image: wurstmeister/kafka
    container_name: kafka1
    ports:
      - "9093:9092"
    environment:
      KAFKA_BROKER_ID: 0
      KAFKA_NUM_PARTITIONS: 3
      KAFKA_DEFAULT_REPLICATION_FACTOR: 2
      KAFKA_ZOOKEEPER_CONNECT: 10.68.4.1:2182
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://10.68.4.1:9093
    volumes:
      - /data/docker-compose/kafka/broker1/logs:/opt/kafka/logs
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always

  kafka2:
    image: wurstmeister/kafka
    container_name: kafka2
    ports:
      - "9094:9092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_NUM_PARTITIONS: 3
      KAFKA_DEFAULT_REPLICATION_FACTOR: 2
      KAFKA_ZOOKEEPER_CONNECT: 10.68.4.1:2182
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://10.68.4.1:9094
    volumes:
      - /data/docker-compose/kafka/broker2/logs:/opt/kafka/logs
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always
  
  kafka3:
    image: wurstmeister/kafka
    container_name: kafka3
    ports:
      - "9095:9092"
    environment:
      KAFKA_BROKER_ID: 2
      KAFKA_NUM_PARTITIONS: 3
      KAFKA_DEFAULT_REPLICATION_FACTOR: 2
      KAFKA_ZOOKEEPER_CONNECT: 10.68.4.1:2182
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://10.68.4.1:9095
    volumes:
      - /data/docker-compose/kafka/broker3/logs:/opt/kafka/logs
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always
服务名地址端口
zookeeper10.68.4.12182
kafka110.68.4.19093
kafka210.68.4.19094
kafka310.68.4.19095

参数说明

KAFKA_BROKER_ID: 0
KAFKA_NUM_PARTITIONS:topic的分区数
KAFKA_DEFAULT_REPLICATION_FACTOR:分区的副本数
KAFKA_ZOOKEEPER_CONNECT:zookeeper地址
KAFKA_LISTENERS:容器内访问的地址
KAFKA_ADVERTISED_LISTENERS:容器外访问的地址

启动/停止 kafka 服务

# 创建 kafka 容器并启动
docker-compose up -d --build kafka1
docker-compose up -d --build kafka2
docker-compose up -d --build kafka3

# 停止 kafka 容器
docker-compose stop kafka1
docker-compose stop kafka2
docker-compose stop kafka3

docker-compose ps 确认是否部署成功,可以看到3个容器都启动成功了。

Springboot集成kafka

pom.xml 配置

<dependency>
  <groupId>org.springframework.kafka</groupId>
  <artifactId>spring-kafka</artifactId>
</dependency>

application.yml 配置

spring:
  kafka:
    bootstrap-servers: 10.68.4.1:9093,10.68.4.1:9094,10.68.4.1:9095
    listener:
      missing-topics-fatal: false
    producer:
      retries: 0
      batch-size: 16384
      buffer-memory: 33554432
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
    consumer:
      group-id: demo-group
      auto-commit-interval: 100
      enable-auto-commit: true
      auto-offset-reset: earliest
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer

producer

@RestController
@RequestMapping("/kafka")
public class KafkaProducer {
    @Autowired
    private KafkaTemplate<String, Object> kafkaTemplate;

    @GetMapping("/msg/{message}")
    public void sendMessage(@PathVariable("message") String normalMessage) {
        log.info("message received : " + normalMessage);
        kafkaTemplate.send("messages", normalMessage);
        log.info("Kafka message [" + normalMessage + "] send success!");
    }
}

consumer

@Component
public class KafkaConsumer {
    // 消费监听
    @KafkaListener(topics = {"messages"})
    public void receiveMessages(ConsumerRecord<?, ?> record){
        // 消费的哪个topic、partition的消息,打印出消息内容
        log.info("简单消费:" + record.topic() + "-" + record.partition() + "-" + record.value());
    }
}

测试

发送http请求?localhost:8091/kafka/msg/Hello_Wrold 后,可以成功发送kafka消息,并自动消费,并打印对于日志

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-01 14:34:51  更:2021-08-01 14:36:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/2 22:56:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码