Kafka学习笔记

kafka

kafka是一款分布式消息发布和订阅系统,它由于具有高性能、高吞吐的特点而被广泛应用于大数据传输场景

kafka的应用场景

  • 行为跟踪
  • 日志收集

kafka的架构?

一个典型的kafka集群包含若干个Producer、若干个Broker、若干个Consumer Group以及一个Zookeeper集群。kafka通过zookeeper管理集群配置及服务协同,Producer使用push模式将消息推送到Broker,Consumer通过监听使用pull模式从Broker订阅消息并消费。多个broker协同工作,producer和consumer部署在各个业务节点。三者通过zookeeper管理协调请求和转发。这样就组成了一个高吞吐、高性能的分布式消息发布和订阅系统。
这里写图片描述

kafka的安装部署及集群部署?

下载:以kafka_2.11-1.1.0、linux系统为例,下载
解压缩:tar -xzf kafka_2.11-1.1.0.tgz ,之后:cd kafka_2.11-1.1.0
启动zookeeper:由于kafka是依赖于zookeeper的,所有在启动kafka之前要确保zookeeper已启动,如果没有单独的zookeeper,可以启动kafka中附带的,输入命令:bin/zookeeper-server-start.sh config/zookeeper.properties
启动kafka:bin/kafka-server-start.sh config/server.properties
以上为kafka的单机启动过程
如果是集群启动,修改每个kafka中config/server.properties中的参数
broker.id=1 每个kafka的此参数必须不一样
listeners=PLAINTEXT://xxx.xxx.xxx.xxx:9093 必须填写本机的IP
log.dir=/tmp/kafka-logs 消息存储的路径

Topic&partition

Topic:在kafka中,topic是存储消息的逻辑概念,所有消息都是发送到topic之上的
partition:由一个或一个以上的partition组成一个topic,partition是物理上的概念。同一topic上的partition是不同的。每个消息都有一个offset唯一标识。

消息分发策略

当往topic中发送消息时,kafka默认将key hash取模之后路由到不同的partition,如果key为null,则根据参数 metadata.max.age.ms的时间范围随机选择一个partition

消息消费原理

对于同一topic而言,同一groupId的多个消费者中,只发送一条消息,此group中的消费者消费一次。对于不同的groupId的多个消费者来说,每个group都会接受一次消息。这样,根据不同的group,topic可以是消息队列模式,也可以是发布/订阅模式。

消息分区

范围分区:按照顺序获取对应的分区消息,可能编号小的负载会大
轮询分区:把所有的partition和consumer线程都列出来,然后按照hashcode进行排序,最后通过轮询算法分配partition给consumer(必备条件:每个主题的消费者实例具有相同数量的流、每个消费者订阅的主题必须是相同的)
触发情况:consumer group内的成员数量有变化、topic分区的数量有变化

消息分区reblance的机制

Coordinator:kafka集群提供了一个角色coordinator来对ConsumerGroup进行管理。当ConsumerGroup第一个consumer启动时,它会和kafka集群进行通信,用以确认coordinator,kafka集群会返回一个负载最小的broker的id返回给此consumer,此broker就为coodrinator,之后改组的所有成员都会和此coordinator进行协调通信
JoinGroup:所有的consumer都会首先和coordinator进行通信,向coordinator发送JoinGroup请求,当所有的consumer都向coordinator发送了此请求之后,coordinator会确认一个leader,并返回信息,并且在返回给leader的信息中,会额外发送所有组员的信息。
synchronizing Group:所有consumer向groupCoordinator发送SyncGroupRequest请求,并处理SyncGroupResponse相应(leader将消费者对应的partition分配方案通过给consumer group中所有的consumer)

消息存储策略

kafka是使用日志文件的方式来保存生产者的消息,每条消息都有一个offset来保存此消息在它分区中的偏移量。kafka将Log分为多个LogSegment,一个LogSegment对应磁盘上的一个日志文件和一个索引文件。
清理策略:1超过指定时间之后则进行清理(默认7天)、2查过一定文件大小则清理,只要满足其中一个则进行清理,优先清理存在最久的LogSegment(log.retention.bytes log.retention.hours)

消息副本机制

每个分区中会存在多个副本,在所有的副本集中会存在一个leader副本,所有的读写请求都会由它处理,剩余的副本作为foller副本,它只会从leader同步数据。

副本消息同步原理

LEO:日志末端偏移量(Log End Offset),记录了该副本底层日志中下一条消息的offset。即如果LEO=10,则该副本保存的消息范围为[0,9]
HW:水位值。对于一个副本而言,其HW不会大于LEO,小于等于HW的消息表示’已备份’的消息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值