Kafka
1、Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以收集并处理用户在网站中的所有动作流数据以及物联网设备的采样信息。
消息队列主要有三个功能:
1、系统解耦:举例:当我们生成故障单以后,会通过短信和邮件告知负责人。那么我们可以把生产的故障单的消息发到MQ里,实现快速生成故障单,调用第三方系统发送短信和邮件。
2、异步通信:可以通过异步调用发送短信和邮件,然后告知负责人。实现故障单的快速生成。
3、削峰填谷:当比如秒杀的时候,每秒来5k个请求,但数据库只可以hold住每秒200个。此时我们就可以通过mq,把消息放到mq里,实现通过时间换空间。实现后续数据的消费。
2、Kafka消费消息的模式:
1、至多一次。一个数据只要被一个消费者消费完以后,数据会被删除,不允许重复消费。
2、没有限制的消费。一个mq被好几个消费者消费,且每个消费者消费是独立的,服务器会记录每一个消费者的偏移量,消费到那个消费了。

3、kafka的基础架构:
每一个record消费的数据会存在一个topic中。topic会将数据分区0,1,2区。每一个分区数据对应一个broker(broker会选择kafka集群中的一个服务当做leader)同时会把分区的数据通过主备存储到kafka的集群中。当一个宕机以后,在选出一个leader。集群中的leader和topic部分元数据存储在zookper中。下图中改字其实是该。阅读请注意。

kafka消息生产模式:每一则消息包含key value 时间戳。kafka会把消息指定到某一个分区。通过key的hash值%分区数,分发到不同的分区。(通过key的hash值可以均匀到分配到不到的分区,且相同的key保证在同一个分区)。副本因子,比如副本因子为3,那么每一个分区会选择一个broker做一个leader,其余的互相分布在别的broker当做flower。宕机以后重新选择leader。每一个broker都会有自己的id。比如broker-0。每一个消费者可以订阅多个消费topic。leader负责分区的读写,flower负责分区的备份。zookeeper负责管理某一个broker是否宕机,并选举新的leader。每一个broker可以身兼数值,做两个分区的leader。同时一个broker可以有多个topic(可以装topic1的partion0,可以装topic2的partion0)。

5、kafka的消息是严格按照先进先出吗?
1、由于消息分发到topic中,由于有分区性的存在,消息是不会完全严格的按照先进先出的原则的。只可以保证每一个分区的先进先出。如果要严格按照按照先进先出,那么可以不分区。
分区中的每一个消息都被分配了唯一的offest,所以说分区是一个有序的不可变的日志序列。kafka会持久所有发布到kafka的消息,默认168小时。

6、kafka是为什么要分区呢?
通过分区可以保证数据的海量存储,读写更改。每一个leader具备读写功能,也就是每一个partion对应一台主机,可以快速的数据响应。由于consumerGroup有均匀消费的原则,每一个分区会分发给不同的消费者实例,所以也保证了数据的快速消费。
7、kafka消费者
在消费者消费topic中数据的时候,每一个消费者会维护本次消费对应分区的偏移量。消费者在消费完一批数据的时候,会将对应消费的偏移量提交给kafka集群。666666因此每一个消费者可以随意控制修改消费的偏移量。每一个消费者控制了自己的消费的偏移量,所以多个消费者之间是彼此独立的。
如下图:

在环境中,每一个消费者都已自己每一个消费的consumer Group命名。但凡发布到topic中的记录都会发布到订阅该topic的每一个consumer Group组中的一个实例中。在消费者组里,有一个均衡消费的原则,每一个topic会将下面分区的消息均匀的分配到组消费的实例上。如上图:该topic下有四个分区,那么会均匀的分配给一个实例两个分区。如果消费实例大于分区数,那么一个消费实例处于等待状态,等待某一个实例宕机,可以快速选出一个实例进行响应。同时由于一个消费实例会对应一个分区,也保证一个consumerGroup只会对topic中的数据消费。
8、kafak高性能之道
kafka是将消息写入或者缓存到磁盘上的。一般认为在磁盘上读写速度是比较慢的。但为何kafka响应比较快?
硬盘每次写入都会寻址写入,比较耗时,而kafuk是顺序写入的。Memory Mapped Files(后面简称mmap)也称为内存映射文件,用户每次对内存的操作都会被操作系统刷新到硬盘上,极大的降低了io的使用效率,保证了kafka的快速写入。

9、kafka单机版的安装:
安装上传工具:yum install lrzsz 然后rz
上传文件到root下然后解压 tar xf kafka.*.tar.gz 然后mv kafka.* /opt/wanghm
修改server.properties 单机版 修改了三个地方

![]()

启动:./kafka-server-start.sh -daemon ../config/server.properties 后台以配置文件的方式启动
通过jps查看是否启动:

10、kafka 创建topic
本文来自博客园,作者:Jerry&Ming,转载请注明原文链接:https://www.cnblogs.com/jerry-ming/articles/16488871.html

浙公网安备 33010602011771号