Kafka
2021-09-08 19:41:59 0 举报
AI智能生成
整体了解kafka
作者其他创作
大纲/内容
概念
Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,
基于zookeeper协调的分布式日志系统(也可以当做MQ系统),
常见可以用于web/nginx日志、访问日志,消息服务等等
基于zookeeper协调的分布式日志系统(也可以当做MQ系统),
常见可以用于web/nginx日志、访问日志,消息服务等等
主要应用场景
日志收集系统
消息系统
主要设计目标
以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能
高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输
支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输
同时支持离线数据处理和实时数据处理
Scale out:支持在线水平扩展
消息队列通信(传递)模式
点对点模式
在点对点消息系统中,消息持久化到一个队列中。
此时,将有一个或多个消费者消费队列中的数据,但是一条消息只能被消费一次。
当一个消费者消费了队列中的某条数据之后,该条数据则从消息队列中删除。
该模式即使有多个消费者同时消费数据,也能保证数据处理的顺序
此时,将有一个或多个消费者消费队列中的数据,但是一条消息只能被消费一次。
当一个消费者消费了队列中的某条数据之后,该条数据则从消息队列中删除。
该模式即使有多个消费者同时消费数据,也能保证数据处理的顺序
生产者发送一条消息到queue,只有一个消费者能收到
发布-订阅模式(Kafka)
在发布-订阅消息系统中,消息被持久化到一个topic中。
消费者可以订阅一个或多个topic,消费者可以消费该topic中所有的数据,
同一条数据可以被多个消费者消费,数据被消费后不会立马删除。
消费者可以订阅一个或多个topic,消费者可以消费该topic中所有的数据,
同一条数据可以被多个消费者消费,数据被消费后不会立马删除。
发布者发送到topic的消息,只有订阅了topic的订阅者才会收到消息
优点
解耦
消息系统在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。
冗余(副本)
消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险
扩展性
因为消息队列解耦了你的处理过程,所以增大消息入队和处理的频率是很容易的,只要另外增加处理过程即可
灵活性&峰值处理能力
使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。
可恢复性
消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。
顺序保证
Kafka保证一个Partition内的消息的有序性
缓冲
消息队列通过一个缓冲层来帮助任务最高效率的执行———写入队列的处理会尽可能的快速。
该缓冲有助于控制和优化数据流经过系统的速度。
该缓冲有助于控制和优化数据流经过系统的速度。
异步通信
消息队列提供了异步处理机制
术语
broker
Kafka 集群包含一个或多个服务器,服务器节点称为broker
broker存储topic的数据
如果某topic有N个partition,集群有N个broker,那么每个broker存储该topic的一个partition
如果某topic有N个partition,集群有(N+M)个broker,那么其中有N个broker存储该topic的一个partition,
剩下的M个broker不存储该topic的partition数据
剩下的M个broker不存储该topic的partition数据
如果某topic有N个partition,集群中broker数目少于N个,那么一个broker存储该topic的一个或多个partition。
在实际生产环境中,尽量避免这种情况的发生,这种情况容易导致Kafka集群数据不均衡
在实际生产环境中,尽量避免这种情况的发生,这种情况容易导致Kafka集群数据不均衡
Topic
每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic
Partition
topic中的数据分割为一个或多个partition。每个topic至少有一个partition
partition中的数据是有序的,不同partition间的数据丢失了数据的顺序
在需要严格保证消息的消费顺序的场景下,需要将partition数目设为1
segment文件
.index文件
索引文件,用于检索消息
.log文件
log文件就实际是存储message的地方
.timeindex文件
索引文件,用于检索消息
Producer
生产者即数据的发布者,该角色将消息发布到Kafka的topic中
broker接收到生产者发送的消息后,broker将该消息追加到当前用于追加数据的segment文件中
生产者发送的消息,存储到一个partition中,生产者也可以指定数据存储的partition
Consumer
消费者可以从broker中读取数据。消费者可以消费多个topic中的数据。
Consumer Group
每个Consumer属于一个特定的Consumer Group
Leader
每个partition有多个副本,其中有且仅有一个作为Leader,Leader是当前负责数据的读写的partition
Follower
Follower跟随Leader,所有写请求都通过Leader路由,数据变更会广播给所有Follower,Follower与Leader保持数据同步
如果Leader失效,则从Follower中选举出一个新的Leader
当Follower与Leader挂掉、卡住或者同步太慢,leader会把这个follower从“in sync replicas”(ISR)列表中删除,
重新创建一个Follower
重新创建一个Follower
架构
时间规划
版本规划
成本预算
风险规划
ACK应答机制
0:代表producer往集群发送数据不需要等到集群的返回,不确保消息发送成功。安全性最低但是效率最高。
1:代表producer往集群发送数据只要leader应答就可以发送下一条,只确保leader发送成功。
all:代表producer往集群发送数据需要所有的follower都完成从leader的同步才会发送下一条,
确保leader发送成功和所有的副本都完成备份。安全性最高,但是效率最低。
确保leader发送成功和所有的副本都完成备份。安全性最高,但是效率最低。
存储策略
基于时间,默认配置是168小时(7天)
基于大小,默认配置是1073741824
需要注意的是,kafka读取特定消息的时间复杂度是O(1),所以这里删除过期的文件并不会提高kafka的性能!
0 条评论
下一页