Kafka初步学习

Kafka可以作为消息中间件,在企业应用很广泛。当前的企业应用的子系统是非常多的,一个应用,可能就包含了MySQL, Redis, WebApp, DB…,多个子系统,而不同系统之间的API是有差异的,Kafka就是作为中心,负责与每个子系统的对接。

关键术语

消息(message)
消息是Kafka的数据单元,是键值对(key value)构成,key作为元数据,是可选的,一般用来划分消息所在的分区,value即为消息的内容。消息的key value都是由字节数组构成,数据格式由客户端控制。

生产者(producer)/ 消费者(consumer)
生产者即为发布者,负责生产(push 写入)消息。
消费者即为订阅者,负责消费(pull 读取)消息,消费者是消费组(consumer group)的一部分,消费同一个消息的消费者,会被划分到不同的消费组,每个消费者都独占一个消息的消费者会划分到同一个消费组中。

主题(topic)/ 分区(partition)
Kafka消息通过主题(topic)来分类,一个主题下有多个分区(partition)。消息以追加的方式写入分区,并以FIFO的方式读取。Broker会给每一个消息提供offset,用来保证消息在每个分区中的顺序,每个消息在分区中都有唯一的offset,从而保证了分区中的有序性,但不保证跨分区的有序。每一个分区都会有一个log的文件夹,每个log文件夹下,由多个的segment和索引文件组成,实际上消息就是写入Log文件的。Kafka为segment文件提供了保留政策(根据时间和大小)。

副本(replica)
Kafka提供了“复制机制”,实现消息冗余,每个分区的实例称为“副本”(replica),这些副本有一个首领副本(leader)和多个追随者(follower)副本组成,每个分区至少有一个副本,如果只有一个副本,那就是leader。

leader副本负责数据 I/O,follower负责同步leader的数据,一般我们认为leader副本与follower副本的数据是相同的(同一时刻是不相同的,因为在不断的同步leader),当leader副本所在的机器出现问题时,就会根据最后一条消息的offset离leader副本最后一条消息offset最相近的副本,作为新的leader副本。

这种机制是由ISR来管理的,会查看他们之间的最后一条offset,如果差距过大,比如某个follower副本出现故障,一直没有同步消息,offset差距超过一定阈值,就会从ISR剔除。ISR指的是正在服务的节点。

集群中的每个服务都会同时扮演两个角色:作为它所持有的一部分分区的leader,同时作为其他分区的followers,这样集群就会据有较好的负载均衡。

broker
Kafka服务器通常被称为broker,一个broker独占一台物理机。

  • 负责接收生产者发布的信息,并将消息写入到磁盘中
  • 负责接收消费者订阅的请求,并返回磁盘中的消息。

多个broker,组成Kafka集群(cluster),其中之一作为集群管理器(cluster controller),每个分区的副本,必须分布在不同的的broker中,这样才能实现消息冗余,否则放在同一台机器下,如果机器出现问题,副本都出故障了,就无法实现消息冗余了。

broker负责“消息保留策略”,当消息超过保留时间或者消息的总量达到大小限制,旧的消息将过期并且被删除。

Kafka运行于JVM,依赖ZooKeeper(集群协调和元数据管理)

两种消息发布方式

队列模式(一对一):consumers可以同时从服务端读取消息,每个消息只被其中一个consumer读到。若所有的consumer都在一个组中,这就成为了传统的队列模式,在各consumer中实现负载均衡

发布-订阅模式(一对多):发布-订阅模式中消息被广播到所有的consumer中。如果所有的consumer都不在不同的组中,这就成为了发布-订阅模式,所有的消息都被分发到所有的consumer中

Kafka官方文档
可以阅读官方文档,全英文的,建议可以参考中文的数据、文章后,在查看这些文档,印象更加深刻:
http://kafka.apache.org/documentation/#quickstart_startserver

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值