kafka是Linkedin开源的分布式发布-订阅消息系统(消息队列)
kafka特点
1 高吞吐率、低延迟,每秒处理几十万消息,延迟最低几毫秒
2 可扩展性,支持动态扩展节点数据
3 持久性与可靠性,数据被持久化磁盘,支持数据多副本防止数据丢失
4 高容错,允许节点失败
5 高并发,支持上千个客户端同时读写
架构如图
kafka:produce
1 向broker发送消息
2 可通过任意一个broker发现其他broker的位置信息
3 消息组成 topic key value timestamp
kafka:broker
1 producer和consumer之间的桥梁
从producer端接收消息,并保存下来
将消息发送给订阅的consumer
2 可将消息可靠地缓存一段时间
每个消息保存成多副本(默认3)
可设置保存时间(默认时间)
kafka:partition与topic
topic
用户划分message的逻辑概念,一个topic可以分布到不通的broker上
partition
kafka横向扩展和一切并行化的基础,每个topic至少分成1个partition
消息在partition中是有编号的,称为“offset”
kafka以partition为单位对消息进行备份(replica),每个partition可以配置至少有1个replica
kafka:consumer
负责从kafka中读取数据,并进行处理
Consumer group
多个consumer可形成一个group,同时读取某个topic。
每个consumer读取一个或多个partition
Consumer position
每个consumer自己维护读取的位置(offset,一旦挂掉后,重启可继续读取)
kafka架构图
kafka:服务保证
顺序保证
同一个producer发送到单个topic的同一partition的消息是顺序的
Consumer按照消息在日志中的写入顺序读取消息
Producer产生的数据由Consumer消费
容错
如果消息的副本数是N,则N-1台机器宕机后不会导致丢失数据
应用场景 :监控 、消息队列、站点的用户活动追踪 、流处理、