Kafka简介:
Kafka是一个高吞吐,分布式,基于发布订阅的消息系统,
利用Kafka技术可在廉价PC Server上搭建起大规模消息系统。
应用场景:Kafka和其他组件比较,具有消息持久化,高吞吐,实时等特性,适用于离线和
实时的消息消费,如网站活性跟踪,聚和统计系统运营数据(监控数据),
日志收集等大量数据的数据手机场景。
优点:
高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒;
可扩展性:kafka集群支持热扩展;
持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失;
容错性:允许集群中节点故障(若副本数量为n,则允许n-1个节点故障);
高并发:支持数千个客户端同时读写
缺点:消息乱序(不能保证全局有序)、不支持事务(可能会丢消息或有重复消息)、
复杂性(部署和维护成本更高)
Kafka拓扑结构图:
1>一个典型的Kafka集群中包含若干Producer(可以是web前端产生的page View,或者是服务器日志,系统CPU,Memory等),
若干Broker(Kafka支持水平扩展,一般broken数量较多,集群吞吐率越高),若干Consumer,以及一个Zookeeper集群。
Kafka通过Zookeeper管理集群配置,选举Leader,以及在Consumer发生变化时进行rebalance。
Producer使用push模式将消息发布到Broker,Consumer使用pull模式从Broker订阅并消费消息。
2>Broker:Kafka集群包含一个或多个服务实例,这些服务实例被称为Broker。
3>producer:负责发布消息到Kafka Broker.
4>Consumer:消息消费者,从Kafka Broker读取消息的客户端
Kafka Topics:
1>每条发布到Kafka的消息都有一个类别,这个类别被称为Topic也可以理解为一个存储消息的队列。生产者产生
的消息逐条房到Topic的末尾。消费者从左至右顺序读取消息,使用Offset来记录的位置。
Kafka Partition
1>每个topic被分为多个partition,每个partition在存储层面对应一个log文件,log文件中记录了所有的消息数据。
2>引入Partition机制,保证了Kafka的高吞吐能力,因为Topic的多个Partition分布在不同的Kafka节点上,
这样一来多个客户端(Producer和Consumer)就可以并发访问不同的节点对一个Topic进行消息的读写。
3>Topic的Partition数量可以在创建时配置。
4>Partition数量决定了每个Consumer group中并发消费者的最大数量。
什么是Partition偏移量?
1>每条消息在文件中的位置称为offset,offset是一个long型数字,它唯一标记一条信息。消费者通过
(offset,partition,Topic)跟踪记录。
Kafka Parition副本特性:
1>副本以分区为单位。每个分区都有各自的主副本和从副本。
2>主副本叫做Leader,从副本叫做Follower。Follower通过拉取的方式从Leader中同步数据。
3>消费者和生产者都是从Leader中读取数据,不与Follwer交互。
Kafka Logs:
1>Kafka把Topic中一个Parition大文件分成多个小文件段,通过多个小文件段,
就容易定期清除或删除已经消费完文件,减少磁盘占用。
2>为了使得Kafka的吞吐率可以线性提高,物理上把Topic分成一个或多个Partition,每个Parition在物理上对应一个文件夹,
该文件夹下存储这个Parition的所有消息和索引文件。
Kafka Log Cleanup
日志的清理方式有两种:delete 和 compact。
删除的阈值有两种:过期的时间和分区内总日志大小。
Kafka数据可靠性。
Kafka所有消息都会被持久化到硬盘中,同时Kafka通过对Topic Partition设置Replication来保障数据可靠
Replication
当集群中有Broker挂掉的情况,系统可以主动地使Replicas提供服务;
系统默认设置每一个Topic的replication系数为1,可以在创建Topic时单独设置;
Replication的基本单位是Topic的Partition;
所有的读和写都在Leader上进行,Followers只是做为备份
Kafka消息传输
Kafka消息传输保障机制,通过配置不同的消息发送模式来保障消息传输,进而满足不同的可靠性要求应用场景。
Kafka Cluster Mirroring
Kafka Cluster Mirroring是Kafka跨集群数据同步方案,通过Kafka内置的MirrorMaker工具来实现
写数据
Producer连接任意存活的Broker,请求制定Topic、Partition的Leader元数据信息,然后直接与对应的Broker直接连接,发布数据。
Consumer读数据总体流程: Consumer连接指定TopicPartition所在的LeaderBroker,用主动从Kafka中获取消息。
二分查找:
分查找是一种非常高效的查找算法
二分查找速度快的原因二分查找算法也称折半查找算法,是在有序数组中用到的较为频繁的一种查找算法。
在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,即顺序查找。
二分查找较顺序查找更优,因为这种算法每一次比较都使查找范围缩小一半
二分查找虽然性能比较优秀,但应用场景也比较有限。底层必须依赖数组,
并且还要求数据是有序的。对于较小规模的数据查找,
我们直接使用顺序遍历就可以了,二分查找的优势并不明显。
二分查找更适合处理静态数据,也就是没有频繁的数据插入、删除操作