kafka理解

本文深入探讨了Kafka消息系统的架构与运作原理,包括其独特的发布-拉取模型,高吞吐量特性,以及如何通过Zookeeper实现集群管理和负载均衡。此外,还详细介绍了Kafka的启动流程、关键组件如Broker、Topic、Partition的功能,以及如何使用Kafka的命令行工具进行管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Kafka
简介

kafka不是一个标准的JMS(java message)java消息队列实现,它是一个类似于JMS框架
它是一个发布和拉取过程,和传统的mq是不一样的 传统的是发布和订阅的过程
服务端不会主动把数据推送给消费者,需要消费者自己主动把数据拉取过来
在架构模型方面
客户端Producer通过连接channel和server进行通信,Consumer从queue获取消息进行消费(长连接,queue有消息会推送到consumer端,consumer循环从输入流读取数据),kafka遵从一般的MQ结构,producer,broker,consumer,以consumer为中心,消息的消费信息保存的客户端consumer上,consumer根据消费的点,从broker上批量pull数据;无消息确认机制。
在吞吐量
kafka具有高的吞吐量,内部采用消息的批量处理,zero-copy机制,数据的存储和获取是本地磁盘顺序批量操作,具有O(1)的复杂度,消息处理的效率很高。
传统MQ在吞吐量方面稍逊于kafka,他们的出发点不一样,rabbitMQ支持对消息的可靠的传递,支持事务,不支持批量的操作;基于存储的可靠性的要求存储可以采用内存或者硬盘。
在可用性方面
kafka的broker支持主备模式
在集群负载均衡方面
kafka采用zookeeper对集群中的broker、consumer进行管理,可以注册topic到zookeeper上;通过zookeeper的协调机制,producer保存对应topic的broker信息,可以随机或者轮询发送到broker上;并且producer可以基于语义指定分片,消息发送到broker的某分片上。

Kafka的流程图

在这里插入图片描述

角色介绍

1、producer

生产者,它会把数据源写入到kafka集群中

2、broker

一个broker就是kafka集群的节点,可以存放数据

3、topic

消息的主题,它是一类消息的集合

4、partition

分区概念, 也就是说一个topic有多个分区

5、replication

副本
一个分区可以设置多个副本,副本保证数据的安全性

6、segment

每一个分区数据都很多segment,一个segment里面有2个文件,一个是.log文件,它是topic数据存储的文件,还有一个文件叫.index文件,它是.log文件索引文件。

7、zookeeper

通过zk保存kafka集群元数据信息,这些元数据信息包括:kafka集群地址、有哪些topic,以及每一个topic的分区数等等信息

8、consumer

消费者
消费者去kafka集群中拉取数据然后进行消费

9、offset

消息的偏移量
保存消息消费到哪里了,它会把消息消费的数据记录,当前这个记录信息叫做offset偏移量
消息偏移量的保存有2种方式
第一种: 可以kafka自己去保存(这个偏移量由整个kafka集群自带一个topic:__consumer_offsets)

第二种:由zookeeper保存

Kafka的消费策略

在这里插入图片描述

Kafka集群启动

先启动zk集群
然后在所有节点执行脚本

nohup kafka-server-start.sh /export/servers/kafka/config/server.properties >/dev/null 2>&1 &

一键启动kafka

start_kafka.sh
#!/bin/sh
for host in node1 node2 node3
do
ssh KaTeX parse error: Expected 'EOF', got '&' at position 116: …s >/dev/null 2>&̲1 &" e…host kafka is running"

done

2、停止

然后在所有节点执行脚本

需要修改信息 kafka-server-stop.sh
这个脚本的逻辑就是通过下面的命令获取kafka进程号,这个默认的kafka集群是获取不到(脚本有问题)
原始:
PIDS=$(ps ax | grep -i ‘kafka.Kafka’ | grep java | grep -v grep | awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 1}̲') ​ 再所有的节点都需要修…(ps ax | grep -i ‘kafka’ | grep java | grep -v grep | awk ‘{print $1}’)

可以在所有节点执行:
kafka-server-stop.sh

一键停止kafka

stop_kafka.sh

#!/bin/sh
for host in node1 node2 node3
do
ssh KaTeX parse error: Expected 'EOF', got '&' at position 79: …-server-stop.sh&̲" echo "host kafka is stopping"

done

kafka的命令行的管理使用

创建topic
kafka-topics.sh

kafka-topics.sh --create --partitions 3 --replication-factor 2 --topic test --zookeeper node-1:2181,node-2:2181,node-3:2181
2、查询所有的topic
kafka-topics.sh

kafka-topics.sh --list --zookeeper node-1:2181,node-2:2181,node-3:2181
3、模拟生产者写入数据到topic中
kafka-console-producer.sh

kafka-console-producer.sh --broker-list node-1:9092,node-2:9092,node-3:9092 --topic test
4、模拟消费者拉取topic中的数据
kafka-console-consumer.sh

kafka-console-consumer.sh --bootstrap-server node1:9092,node2:9092,node3:9092 --topic test --from-beginning

kafka-console-consumer.sh --zookeeper node1:2181,node2:2181,node3:2181 --topic test --from-beginning









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值