kafka学习

kafka是一种分布式的,基于发布订阅的消息系统。具有以下几个方面的特性。

1.能够提供常数时间的消息持久化及访问性能。

2.高吞吐率。廉价的商用机器上能够达到每秒100k条的消息传输。

3.支持kafka server间的消息消息分区,分布式消费,分区内消息的顺序性。

4.支持水平扩展。

5.支持离线数据处理和实时数据处理。

kafka架构

kafka的拓扑结构:

1.producer:消息生产者。

2.consumer:消息消费者。

3.broker:kafka集群由一个或者多个服务器组成。服务器被称为broker。消息由producer发送到broker。consumer从borker中消费消息。

4.Toptic:消息主题。每条发送到kafka集群的消息都有一个Topic,物理上不同topic的消息分开存储 。逻辑上一个topic的消息保存于一个或多个broker上。

5.partition:消息分区。每个topic包括一个或多个partition

6.consumer group:每个consumer属于特定的group,可以为每个consumer指定group name,不指定,则属于默认的group。

 

从图中我么可以看出。kafka集群由若干producer,consumer grouper,broker,zookeeper组成。kafka通过zookeeper来管理集群的配置,以及在consumer发生变化进行reblance。

topic & partion

topic在逻辑上可以被理解为一个队列,消息必须指明它的topic,可以理解为消息必须指定放到哪一个队列中。为了提高kafka的吞吐率,物理上把topic分成一个或多个partion,每个partion物理上对应一个文件夹。该文件夹下存储该partition下的消息及索引文件。

若创建两个topic,topic1和topic2,每个topic对应有13个和19个分区,其中集群中共有8个结点,则集群中会创建32个文件夹。如下图所示:

 

每个日志文件都是一个log entry序列,每个log entry序列包含一个四字节整形值(消息长度,1+4+n),一字节magic value,四字节的crc校验码,n字节的消息体长度组成。每条消息都有在当前partition下的唯一的64字节的offset。它指明了消息的的存储位置,磁盘上消息的存储格式如下:

message length : 4 bytes (value: 1+4+n)
"magic" value : 1 byte 
crc : 4 bytes 
payload : n bytes 
这个log entries并非由一个文件组成,而是分成多个segment,每个segment以该segment下的第一条消息的offset命名并以kafka为后缀。另外会有一个索引文件,他标明每个
segment下的log entry的offset的范围,如下图所示:



kafka高吞吐率的一个很重要的保证就是消息会被顺序写到partition中。如下图所示:



对于传统的消息系统,通常会删除已经消费过的消息,kafka会保存已经消费的消息。并且根据实际情况对已经消费的消息提供两种删除策略,分别是基于消息的消费时间以及partition文件的大小。
我们可以通过配置文件$KAFKA_HOME/config/server.properties,让Kafka删除一周前的数据,也可在Partition文件超过1GB时删除旧数据。配置如下所示:

# The minimum age of a log file to be eligible for deletion
log.retention.hours=168
# The maximum size of a log segment file. When this size is reached a new log segment will be created.
log.segment.bytes=1073741824
# The interval at which log segments are checked to see if they can be deleted according to the retention policies
log.retention.check.interval.ms=300000
# If log.cleaner.enable=true is set the cleaner will be enabled and individual logs can then be marked for log compaction.
log.cleaner.enable
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值