慕课学习笔记https://www.imooc.com/learn/1043
1,Kafka概念
1>what?
LinkedIn 开源
分布式数据同步系统Databus
高性能计算引擎Cubert
Java异步处理框架ParSeq
Kafka流处理平台
LinkedIn开发
2011年开源,加入apache
三个特性:
1,发布
2,订阅
3,数据流的处理
概念
1,物理概念(硬件)
2,逻辑概念(代码或者策略逻辑)
Producer:数据的生产者
Consumer:数据的消费者
Consumer Group:对于消费的升级
同一个Consumer Group中仅有一个Consumer读取Topic的一个或多个Partitions,并且是唯一的Consumer
既然在同一个Group中只要一个Consumer为啥还要存在Group?
1>容错
2>提高性能
Broker:物理概念,服务器级别的kafka节点
Broker Group中的每一个Broker保存Topic的一个或者多个Partitions
Topic:逻辑概念,消息类别,对数据进行区分,隔离
Partition:kafka下的最小存储单元
每一个topic被切分为多个Partitions
消费者数据少于或者等于Partition的数目
Replication:同一个Partition可能会有多个Replica(Partition的备胎)
基本单位Partition
所有的读和写都从Leader进,Followers只是作为备份
Follower必须能够及时复制Leader的数据
增加容错性和可扩展性
Replication Leader: 一个Partition多个Replica只有一个Replication Leader,并且由Replication Leader去和Producer/Consumer去交互。
ReplicaManager:多有分区,副本消息的请求/读取等等
2,Kafka结构
1>四个核心api
Producer API
Consumer API
Streams API
Connectors API
2>Kafa消息结构
Offset:消息当前所处于的偏移是多少
Length:消息的长度
CRC32:校验信息的完整性
Magic:固定的数字,快速判定是不是卡夫卡的消息
attributes:可选,枚举值
timestamp:时间戳
Key Length 长度
Key
Value Length 长度
Value
特点:
分布式
·多分区
·多副本
·多订阅者
·基于Zookeeper调度
高性能
·高吞吐量
·低延迟
·高并发
·时间复杂度O(1)
持久性和扩展性
数据可持久化
容错性
支持在线水平扩展:Broker可以有一个或者多个Partition
消息自动平衡
3,Kafka场景及使用
·消息队列:
·行为跟踪:跟踪用户浏览行为,实时记录到Tokit
·元信息监控:实时监控类似,实时收集用户行为操作信息
·日志收集:将数据抽象成日志进行处理
·流处理:对原始数据进行实时计算,实时处理等等到展示转换
·事件源:回溯这些事件的源的处理
·持久性日志(commit log):可以在节点间备份日志
Kafka的简单案例
启动
简单生产者
简单消费者
1,启动安装包中的Zookeeper
➜ bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
2,启动kafka
➜ bin/kafka-server-start.sh config/server.properties
3,创建topic
➜ bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
4,查看topic
➜ bin/kafka-topics.sh --list --zookeeper localhost:2181
test
5,查看kafka是否启动
jps
6,打开消费者窗口
➜ bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
7,生产者窗口下作业并观察消费者窗口是否有响应
➜ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
Hello world!