一、概述
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
输入一下指令。文章来源:https://www.toymoban.com/news/detail-838665.html
文章来源地址https://www.toymoban.com/news/detail-838665.html
到了这里,关于Kafka基本概念及其配置--docker desktop下的配置(尚未更新完成)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!