kafka快速实战与原理了解(1)

基本介绍

  • 最初由Linkedin公司开发,2010捐给Apache
  • 特性:分布式、分区、多副本
  • 基于zk协调的分布式消息系统
  • 可实时处理大数据量消息
  • 应用场景:基于hadoop的批处理、Spark流失处理、web服务器日志、系统访问日志等
  • scala语言开发

业务应用场景

  • 日志手机
  • 消息系统
  • 用户行为跟踪
  • 运营指标监控

基本概念

  • Broker:消息处理节点,可理解为就是一个kafka节点
  • Topic:对消息进行归类
  • Producer/Consumer:生产者与消费者
  • ConsumerGroup:消费组,一条消息可被多个不同消费组消费,同一消费组内,只有一个消费者能消费某条消息
  • Partition:分区,物理概念,一个Topic可分为多个分区,每个分区内的消息是有序的;个人理解与RocketMQ中的Queue概念相似

基本使用

  • 环境准备:kafka为Scala语言开发,需运行在jvm上,所以需准备JDK环境
  • kafka依赖zk做协调器,需安装zk
  • 下载kafka,主要修改config/server.properties
  • 关键属性:
#broker.id属性在kafka集群中必须要是唯一
broker.id=0
#kafka部署的机器ip和提供服务的端口号
listeners=PLAINTEXT://192.168.65.60:9092   
#kafka的消息存储文件
log.dir=/usr/local/data/kafka-logs
#kafka连接zookeeper的地址,ZK集群以逗号隔开
zookeeper.connect=192.168.65.60:2181
  • 启动脚本语法:kafka-server-start.sh [-daemon] server.properties
  • 启动后可进入zk查看zk下的节点数据
  • 停止:bin/kafka-server-stop.sh

创建主题

  • 主题默认:分区数为1,副本数为1,最小写成功数为1
bin/kafka-topics.sh --create --zookeeper 192.168.65.60:2181 --replication-factor 1 --partitions 1 --topic test
  • 主题在生产者发布消息时若不存在,则会自动创建

发送消息

  • 自带bin/kafka-console-producer.sh命令客户端
bin/kafka-console-producer.sh --broker-list 192.168.65.60:9092 --topic test 
>this is a msg
>this is a another msg 

消费消息

  • 自带消费消息命令终端:bin/kafka-console-consumer.sh
bin/kafka-console-consumer.sh --bootstrap-server 192.168.65.60:9092 --topic test
  • 带参数--from-beginning,表示可消费之前全部消息
  • 带参数--whitelist "test|test-2" 同时消费多个主题

单播与多播

  • 单播:一条消息只让一个消费者消费,类似Queue模式;我们让所有消费者在同一个消费者内即可实现;
  • 多播:一条消息可让多个消费者同时都消费,类似发布订阅模式;我们让每个消费者存在不同消费组即可实现;

其他命令

// 查看消费组组名
bin/kafka-consumer-groups.sh --bootstrap-server 192.168.65.60:9092 --list 

// 查看消费组消费偏移量
bin/kafka-consumer-groups.sh --bootstrap-server 192.168.65.60:9092 --describe --group testGroup

current-offset:当前消费组的已消费偏移量
log-end-offset:主题对应分区消息的结束偏移量(HW)
lag:当前消费组未消费的消息数

Topic与Log

  • Topic即为一个消息类别名称,同类消息一般发到同一Topic下
  • 每个Topic下对应有多个分区日志文件

  • 分区是一个有序的消息队列,消息被按序添加到commit log文件中
  • 每个消息在一个分区中有唯一的标识,称为offset
  • 不同分区中的消息,其offset可能相同
  • 消息一般不会自动删除,默认被保留约最近7天
  • 消费者基于自己在提交日志中消费的进度(offset)进行工作
  • offset由消费者自己维护
  • 所以消费者可按序逐条消费commit log消息,也可指定offset来重复或跳过消费某些消息
// 创建2个分区的主题
bin/kafka-topics.sh --create --zookeeper 192.168.65.60:2181 --replication-factor 1 --partitions 2 --topic test1
查看下topic的情况
bin/kafka-topics.sh --describe --zookeeper 192.168.65.60:2181 --topic test1

  • leader节点:负责给定分区的所有读写请求
  • replicas节点:某分区存在的备份,不管是不是leader,甚至中途挂了都会列出
  • isr:是replicas的子集,只列存活且一同步备份了该分区的节点
  • 消息日志主要存在分区文件夹以log结尾的文件
  • 目前支持对topic分区数据量进行动态扩容,单不支持缩减

思考:为什么需要分区? 日志文件受到机器文件大小限制,分区后则可将不同分区放到集群中的不同机器上,相当于分布式存储;其次为了提高生产消息与消费消息的并行度;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值