1、Kafka简介
Kafka是一个分布式发布-订阅消息传递系统,常用于日志服务。
Kafka基本结构包括Topic、Producer、Broker、Consumer:
1)Topic:特定类型的消息流,消息是字节的有效负载;
2)Producer:能够发布消息到话题的任何对象;
3)Broker:已发布的消息保存在一组服务器中,它们被称为代理(Broker)或Kafka集群;
4)Consumer:可以订阅一个或多个话题,并从Broker拉数据,从而消费这些已发布的消息。
简单地说,生产者将数据发送到Broker代理,Broker代理有多个话题topic,消费者从Broker获取数据。
2、kafka基本原理
看下官方的Kafka流程图:
多个 Broker 协同合作,Producer 和 Consumer 部署在各个业务逻辑中被频繁的调用,三者通过 zookeeper管理协调请求和转发。消息是Consumer主动拉取的,而不是由Broker推送的。
借助zookeeper,kafka能够生产者、消费者和broker在内的所以组件在无状态的情况下,建立起生产者和消费者的订阅关系,并实现生产者与消费者的负载均衡。另外,zookeeper保存一些meta信息来保证系统可用性。
3、Kafka存储策略
Kafka存储策略如下:
1)Kafka以Topic来进行消息管理,每个Topic包含多个Partition,每个Partition对应一个逻辑log,有多个Segment组成。
2)每个Segment中存储多条消息,消息id由其逻辑位置决定,即从消息id可直接定位到消息的存储位置,避免id到位置的额外映射。
3)每个Part在内存中对应一个index,记录每个segment中的第一条消息偏移。
4)Producer发到某个Topic的消息会被均匀的分布到多个partition上(或根据用户指定的路由规则进行分布),Broker收到发布消息往对应Partition的最后一个Segment上添加该消息,当某个Segment上的消息条数达到配置值或消息发布时间超过阈值时,Segment上的消息会被flush到磁盘,只有flush到磁盘上的消息订阅者才能订阅到,Segment达到一定的大小后将不会再往该Segment写数据,broker会创建新的Segment。
参考资料: