定义
Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。
kafka作用:
1.解耦
允许独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。
2.可恢复性
系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。
3.缓冲
有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。 更多情况下是解决生产大于消费问题
4.削峰
在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。
如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。
5.灵活
可以动态添加减少服务器
6.异步通信
很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们
总结:
最主要就是 解耦 削峰
发布/订阅模式
消息生产者(发布)将消息发布到 topic 中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到 topic 的消息会被所有订阅者消费。
发布订阅模式分为两种:
1.推送数据速率由消息队列决定
2.拉取数据速率由消费者决定
kafka属于消费者决定数据拉取速率的发布/订阅模式
基于消费者拉取的模式缺点:
消费者需要自行轮询消息队列有没有新消息,会造成 如果长时间消息队列没有消息,消费者常轮询模式造成资源浪费。
kafka基础架构
Producer :消息生产者,就是向 kafka broker 发消息的客户端;
Consumer:消息消费者,向 kafka broker 取消息的客户端;
consumer grop: 消费者组:多个消费者组成:同一个分区的topic只能被某一个消费者组里面的消费者消费
换句话说:同一个消费者组里面不同消费者不能够同时消费同一个分区的数据
Broker :一台 kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker可以容纳多个 topic。
Topic :可以理解为一个队列,生产者和消费者面向的都是一个 topic;
partition: 分区 提高并发。 partition个数可以自行设定,一个 topic 可以分为多个 partition每个 partition 是一个有序的队列
leader:随topic产生,每个分区多个副本的leader,生产者发送数据的对象,以及消费者消费数据的对象都是 leader。
follower:副本机制(即leader和follower在不同节点上)leader发生故障 follower 就会成为新leader
zookeeper:用来保证kafka集群正常工作 相当于hadoop中的namenode 。zk存储消费的位置信息(宕机重启可以继续消费)
0.9之前offset(偏移量)在zookeeper中
0.9之后存在kafka中 存储在kafka本地
原因:消费者在高速拉取消息时也要实时与zk保持通讯给zk记录当前消费的位置信息。会影响效率,zk压力也会增大
kafka时效性:默认存储7天
安装:
1解压
2在kafka目录下创建一个logs目录
3.修改kafka目录conf目录下server.properties
#broker 的全局唯一编号,不能重复
broker.id=0
#删除 topic 功能使能
delete.topic.enable=true
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘 IO 的现成数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#kafka 运行日志存放的路径 第二步创建的logs目录
log.dirs=/opt/module/kafka/logs
#topic 在当前 broker 上的分区个数
num.partitions=1
#用来恢复和清理 data 下数据的线程数量
num.recovery.threads.per.data.dir=1
#segment 文件保留的最长时间,超时将被删除
log.retention.hours=168
#配置连接 Zookeeper 集群地址
zookeeper.connect=192.168.56.20:2181
4.配置环境变量
5.启动zk
6.启动kafka服务
bin/kafka-server-start.sh -daemon config/server.properties