文章整理自:尚硅谷kafka教程
一、kafka概述?
1.定义
kafka是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域。
1.2消息队列
1.2.1 传统消息队列的使用场景

1.2.2 消息队列好处
1.解耦
允许程序独立的扩展或两边的处理过程,只要确保它们遵守相同的接口约束
2.可恢复性
*系统一部分组件失效时,不会影响整个系统。消息队列降低了进程间的耦合度,所以即使一个消息处理进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理
3.缓冲
有助于控制和优化数据流经过系统的速度,解决生产消息远大于消费消息处理速度不一致的问题
4.灵活性(kafka服务扩缩容)&削峰处理
在访问量突增的情况下,应用仍然要继续发挥作用,但这样的突发流量并不常见。
如果因为以处理这类峰值的标准来部署应用则会造成巨大的资源浪费。使用消息队列能够使关键应用顶住突发访问压力,而不会因为突发的超负荷请求使整个服务崩溃。
5.异步通信
很多情况,用户也不需要立即处理消息。消息队列提供了异步处理机制,允许程序把一个消息放入队列,但并不需要立即处理。向消息队列中放入大量消息,在需要的时候程序再去进行处理
1.2.3 消息队列两种模式
点对点模式(一对一,消费者主动拉取数据,消息收到后清除消息)
消息生产者发送消息到queue中,消息消费者从queue中取出消息并消费消息。
消息被消费后,queue中不再存储该消息,所以消费者不可能消费到已经被消费的消息。
queue支持存在多个消费者,但对于一个消息,只会有一个消费者进行消费。

发布/订阅模式(一对多,消费者消费数据后不会清除消息)
消息生产者(发布)将消息发布到topic中,同时有多个消费者(订阅)消费该消息。
和点对点模式不同,发布到topic的消息会被所有订阅者消费

发布订阅模式也有两种:
1.消费者主动拉取;
缺点:消费者不知道topic中是否有消息,需要定时去轮询,比较浪费资源,所以出现了主动推送的模式
2.消息队列主动推送(如微信公众号)
1.3 kafka基础架构

topic:主题,对消息进行分类
partition:分区,主要提高kafka集群负载均衡,同时也提高了并发量
leader:针对于分区,消费者连接kafa只会连接leader
follower:针对于分区,仅仅数据备份,同一个partition的leader和follower一定不在同一台kafka服务上
comsumer goup:消费组,提高消费能力。多个消费者在同一个group时,消费消息时,一个分区的消息只能被同一个消费组的同一个消费者消费;消费者group中消费者的个数等于topic的partition数时,消费能力最合理,group中消费者数量大于partition分区数时,会造成资源浪费,多余消费者依然无法消费到消息。
zookeeper:管理kafa集群信息,存储消费位置信息(0.9版本前);
如:消费者A需要消费topic-partition0的10条消息,在消费到第5条时挂了,这时候消费进度的信息保存在zk里和内存中;
0.9版本后,offset存储在kafka集群的系统级topic中(默认存储磁盘7天),有kafka集群维护,主动拉取时高并发情况下对zk访问压力较大。
二、kafka快速入门
1.1使用docker-compose安装kafka
version: '3'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: 192.168.58.100 # 不能通过hostname来配置(消费者和生产者识别不到)
KAFKA_CREATE_TOPICS: "test:1:1"
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
kafka-manager:
image: sheepkiller/kafka-manager
environment:
ZK_HOSTS: zookeeper:2181
ports:
- "19000:9000"
1.2测试访问kafka-manager
192.168.253.100:19000

出现以上问题 一般是docker-compose.yml文件中的kafka配置ip地址有误
添加kafka节点

1.3 查看kafka版本号
docker exec kafka_compose-kafka-1 find / -name *kafka_* | head -1 | grep -o ‘\kafka[^\n]*’

1.4 查看zookeeper版本号
docker exec kafka_compose-zookeeper-1 pwd

1.5 扩展kafka的broker
启动时指定kafka的broker数量
#端口一致所以只能启动一个broker,可能需要配置swarm网络。未亲测
docker-compose up --scale

文章详细介绍了Kafka的基本概念,包括消息队列的模式、Kafka的架构如topic、partition、leader/follower,以及数据存储和消费者、生产者的策略。特别讨论了Kafka的数据可靠性,如副本同步策略、ISR队列、ack应答机制,以及如何保证ExactlyOnce语义。此外,还涵盖了Kafka的消费者组、监控工具KafkaEagle和一些常见的面试题。
最低0.47元/天 解锁文章
3448

被折叠的 条评论
为什么被折叠?



