Kafka基本概念及其配置--docker desktop下的配置(尚未更新完成)

一、概述

Apache Kafka 是一款开源分布式流处理平台。可以用来发布和订阅数据以及对数据进行实时或者离线处理。

1、主要特点

  • 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作;
  • 扩展性强:支持分布式集群部署,且kafka集群支持热扩展;
  • 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失;
  • 容错性强:允许集群中节点失败。(最多允许n-1个节点失败);
  • 高并发:支持多个客户端同时读写;
  • 支持实时在线处理和离线处理:可以使用storm实时流处理系统对消息进行实时处理,同时还支持hadoop这种批处理系统进行离线处理;
  • 多客户端支持:比如java、golang等;

2、主要应用场景:

  • 消息系统:常规的消息队列中间件,实现异步解耦、削峰等功能
  • 日志收集:Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如Hadoop、Hbase、Solr等;
  • 数据监控:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告;
  • 流式处理:比如spark streaming和storm;
  • Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到Hadoop、数据仓库中做离线分析和挖掘;

二、基本概念
1、Broker
每个Broker即一个kafka服务实例,多个broker构成一个kafka集群。生产者发布的消息保存在broker中,消费者从broker获取消息进行消费。

在集群中,根据每个kafka实例担任的角色可分为leader(controller)和broker。

2、Topic
kafka中将消息分类,每一类消息称为一个Topic,生产者通过指定Topic将消息发送到broker中,消费者通过指定Topic可以针对不同的Topic采取不同的消费逻辑。Topic有点类似于数据库的表。

3、Partition
一个Topic可以分为多个Partition,每个Partition是一个有序队列,在Partition中每条消息都存在一个有序的偏移量offset代表这条消息在paitition中的位置。在一个Topic的多个partition中,分为leader和follower,只有leader进行读写操作,follower仅进行复制,客户端无法感知。

在一个集群中,同一个topic的不同partition可分布在不同的broker中,以保证数据安全可用。  图片来源:blog.csdn.net/m0_46109609…

4、Replica
为了保证数据安全,partition有多个副本,至少会有一个leader副本和多个follower副本。leader负责处理客户端的读写请求,follower副本只复制leader副本的数据。当leader宕机时,follower会自动接替leader副本的工作,从而保证数据的可用性。

5、Producer
生产者,负责生产消息,并发送到broker。

6、Consumer
消费者,负责消费broker中topic消息,每个consumer归属于一个consumer group。

3、docker desktop部署Kafka和zookper

安装docker desktop,这个想比之下比较方便,很多配置可以直接拉取镜像。

下载完后打开可以看到这个页面,对于可能出现打不开的问题,我之前遇到的原因是因为分配的空间太小了,调一下即可。

2.拉取镜像,配置yml文件
docker pull zookeeper 

首先拉取镜像,然后创建一个zookpeer文件夹

里面放这个进去,搭建三个zoo

version: '3'

services:
  zoo1:
    image: zookeeper:3.5.9
    container_name: zoo1
    restart: always
    privileged: true
    ports:
      - 2182:2181
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181

  zoo2:
    image: zookeeper:3.5.9
    container_name: zoo2
    restart: always
    privileged: true
    ports:
      - 2183:2181
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181

  zoo3:
    image: zookeeper:3.5.9
    container_name: zoo3
    restart: always
    privileged: true
    ports:
      - 2184:2181
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181

networks:
  default:
    external: true
    name: kafka-net

win+R打开任务管理器,进到之前创建的zookpeer,输入

docker-compose up -d

等待拉取完成搭建完成。

同样的,kafka也是创建一个kafka后,生成一个yml文件

kafka-compose.yml

version: '3'

services:
  broker1:
    image: wurstmeister/kafka:latest
    restart: always
    container_name: broker1
    privileged: true
    ports:
      - "9092:9092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.43.207:9092    ## 宿主机IP
      KAFKA_ADVERTISED_PORT: 9092
      ## zookeeper 集群,因为都在同一个内网,所以可以通过容器名称获取到容器的ip
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
    volumes:
      - "/home/veteran/data/kafka/node1/data/:/kafka"

  broker2:
    image: wurstmeister/kafka:latest
    restart: always
    container_name: broker2
    privileged: true
    ports:
      - "9093:9092"
    environment:
      KAFKA_BROKER_ID: 2
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.43.207:9093    ## 宿主机IP
      KAFKA_ADVERTISED_PORT: 9093
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
    volumes:
      - "/home/veteran/data/kafka/node2/data/:/kafka"

  broker3:
    image: wurstmeister/kafka:latest
    restart: always
    container_name: broker3
    privileged: true
    ports:
      - "9094:9092"
    environment:
      KAFKA_BROKER_ID: 3
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.43.207:9094   ## 宿主机IP
      KAFKA_ADVERTISED_PORT: 9094
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
    volumes:
      - "/home/veteran/data/kafka/node3/data/:/kafka"

networks:
  default:
    external: true
    name: kafka-net  

输入一下指令。

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值