kafka的概念
什么是kafka
kafka是一个消息系统,由linkedin于2011年设计开发,用作linkedin的活动流(activity stream)和运营数据处理管道(pipeline)的基础。
kafka是一种分布式的,基于发布/订阅的消息系统。主要设计目标如下:
- 以时间复杂度O(1)的方式提供消息持久化能力,即使对TB以上的数据也能保证常熟时间复杂度的访问性能:
- 高吞吐率。即使在非常廉价的商业机器上也能做到单机支持每秒100k条以上消息的传输
- 支持kafka server间的消息分区,及分布式消费,同时保证每个分区内的消息顺序传输
- 同时支持离线数据处理和实时数据处理
- scale out:支持在线水平扩展
kafka的基本概念
1.broker
kafka集群包含一个或多个服务器,这种服务器被称为broker
- topic:每条发送到kafka集群的消息都有一个类别,这个类别被称为topic。物理上,不同topic的消息分开存储;逻辑上同一个topic的消息虽然保存于一个或多个broker上,但用户只需指定消息的topic即可生产或消费数据,不必关系数据存于何处
- partition:partition是物理上的概念,每个topic包含一个或多个partition,每个分区在物理上对应一个文件夹,该文件夹里面存储了这个分区的所有消息和索引文件。在创建topic时可指定parition数量,生产者将消息发送到topic时,消息会根据 分区策略 追加到分区文件的末尾,属于顺序写磁盘,因此效率非常高
分区策略
多Partition支持水平扩展和并行处理, 顺序写入提升吞吐性能
- producer:负责发布消息到kafka broker
- consumer:消息消费者,向kafka broker读取消息的客户端
- consumer group:每个consumer属于一个特定的consumer group。可为每个consumer指定group name,如不指定group name属于默认的group
partition和replica
![](https://img.haomeiwen.com/i18006539/a44ff5afd5e50f55.png)
topic特性
通过partition增加可扩展性
通过顺序写入达到高吞吐
多副本增加容错
kafka的集群配置
ISR
rebalance
hot partition
kafka的高级特性
客户端实现序列化/分区/压缩操作
生产者-确认模式
- ack = 0:只发送不管有没有写入broker
- ack = 1:写到leader就认为成功
- ack = -1/all:写入到最小副本数成功
生产者特性
- 同步发送
- 异步发送
网友评论