kafka笔记-1-基础概念
2019-04-17 23:19
411 查看
文章目录
简介:
• Kafka是Linkedin于2010年12月份开源的消息系统
• 一种
分布式的、
基于发布/订阅的消息系统
• 特点:
– 消息持久化:通过
O(1)的磁盘数据结构提供数据的持久化
– 高吞吐量:每秒百万级的消息读写
– 分布式:扩展能力强
– 多客户端支持:java、 php、 python、 c++ ……
– 实时性:生产者生产的message立即被消费者可见
基本组件
• Broker:每一台机器叫一个Broker
• Producer:日志消息生产者,用来写数据
• Consumer:消息的消费者,用来读数据
• Topic:不同消费者去
指定的Topic中读,不同的生产者往不同的Topic中写
• Partition:
在Topic基础上做了进一步区分分层
• Kafka内部是分布式的、一个Kafka集群通常包括多个Broker(多台机器)
•
负载均衡:将
Topic分成多个分区,每个Broker存储一个或多个Partition
• 多个Producer和Consumer同时生产和消费消息
Topic
• 一个Topic是一个用于发布消息的分类或feed名,kafka集群使用分区的日志,
每个分区都是有顺序且不变的消息序列。
• commit 的log可以不断追加。消息在每个分区中都分配了一个叫 offset 的 id 序列来唯一识别分区中的消息。
anatomy n. 解剖;解剖学;剖析;骨骼
举例:若创建topic1和topic2两个topic,且分别有13个和19个分区,则整个集群上会相应会生成共32个文件夹
•
无论发布的消息是否被消费,kafka都会持久化一定时间(可配置)。
•
每个消费者都持久化这个offset在日志中。通常消费者读消息时会使offset值 线性的增长,但实际上其位置是由消费者控制,它
可以指定offset按任意顺序来消费消息。比如复位到老的offset来重新处理。
•
每个分区代表一个并行单元。
Message
• message(消息)是通信的基本单位,每个producer可以向一个topic 发布一些消息。如果consumer订阅了这个主题,那么新发布的消息就会广播给这些consumer。
• message format:
– message length : 4 bytes (value: 1+4+n)
– “magic” value : 1 byte
– crc : 4 bytes
– payload : n bytes
Producer
• 生产者可以发布数据到它 指
定的topic中,并
可以指定在topic里哪些消息分配到哪些分区(比如简单的
轮流分发各个分区或通过
指定分区语义分配key到对应分区)
•
生产者直接把消息发送给对应分区的broker,而不需要经过任何路由层。
• 批处理发送,当message积累到一定数量或等待一定时间后进行发送。
Consumer Group
• 一种更抽象的消费方式:
消费组(consumer group)
• 该方式包含了
传统的queue和
发布订阅方式
– 首先
消费者标记自己一个消费组名。消息将
投递到每个消费组中的某一个消费者实例上。
– 如果所有的消费者实例都有相同的消费组,这样就像传统的queue方式。
– 如果所有的消费者实例都有不同的消费组,这样就像传统的发布订阅方式。
–
消费组就好比是个逻辑的订阅者,
每个订阅者由许多消费者实例构成(用于扩展或容错)。
• 相对于传统的消息系统,kafka拥有更强壮的顺序保证。
• 由于
topic采用了partion分区,可在多Consumer进程操作时保证顺序性和负载均衡。
相关文章推荐
- Kafka笔记基础概念和安装配置
- 【学习笔记】3D图形核心基础精炼版-3:屏幕中的三维坐标概念
- Objective-C基础笔记(1)基本概念和第一个程序
- Go语言笔记一——基础概念以及入门
- Jvm基础知识与概念--笔记1
- Docker学习笔记(一):基础概念与核心原理
- Jvm基础知识及概念--笔记2
- C#基础概念学习笔记
- 网络技术基础概念和个人笔记总结(1)
- linux基础概念和个人笔记总结(6)
- Cocos2d-x中的基础概念学习笔记 分类: cocos2d代码编写 2015-07-27 17:08 5人阅读 评论(0) 收藏
- Kafka学习笔记(一):概念介绍
- 【概念笔记】JAVA基础 - part2
- 笔记 OSPF基础 、 单区域配置 、 多区域概念
- Unity学习笔记(一)--基础概念及API接口
- Objective-C基础笔记(1)基本概念和第一个程序
- kafka官方文档学习笔记1--基本概念了解
- Apache Mina学习笔记:Java NIO基础概念
- Java学习笔记(一)——一些基础概念
- SQL基础教程笔记(一)数据库概念