kafka

Kafka的基本知识点
1.1Kafka简介
kafka:(Kafka® is used for building real-time data pipelines and streaming apps. It is horizontally scalable, fault-tolerant, wicked fast, and runs in production in thousands of companies.)
是一种高吞吐量的分布式发布订阅消息的系统,它可以处理消费者规模的网站中所有的动作流数据;Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消费。

2.Kafka与传统消息系统对比,有以下不同:

  • 它被设计为一个分布式系统,易于向外扩展;
  • 它同时为分布订阅提高吞吐量;
  • 它支持多订阅者,从失败能自动平衡消费者;
  • 它将消息持久化到磁盘中,因此可用于批量消费,例如例如ETL,以及实时应用程序
  • 高并发,支持数千个客户端同时读写

架构
首先,介绍下Kafka的基本概念,它的架构包含以下组件:
- 话题(Topic) 是特定类型的消息流,消息是字节的有效负载,话题是消息的分裂或子名.
- 生产者(Productor) 是能够发布消息到话题的任何对象.
- 消费者: 可以订阅一个或多个话题,并从Broker数据,从而消费这些发布的消息.
另外:已发布的消息保存在一组服务器中,它们被称为代理(Broker) 或Kafka集群
这里写图片描述

Kafka与Zookeeper
Zookeeper协调控制(Kafka集群上每个节点的信息,消费者消费的信息状态)
1. 管理broker与consumer的动态加入与离开,随便一台计算机都可以作为Producer向Kafka Broker发消息
2. 触发负载均衡,当broker或consumer加入或离开时会触发负载均衡算法,使得一个consumer group内的多个consumer的消费负载平衡。(因为一个comsumer消费一个或多个partition,一个partition只能被一个consumer消费)
3. 维护消费关系及每个partition的消费信息。

Zookeeper上的细节:
1. 每个broker启动后会在zookeeper上注册一个临时的broker registry,包含broker的ip地址和端口号,所存储的topics和partitions信息。
2. 每个consumer启动后会在zookeeper上注册一个临时的consumer registry:包含consumer所属的consumer group以及订阅的topics。
3. 每个consumer group关联一个临时的owner registry和一个持久的offset registry。对于被订阅的每个partition包含一个owner registry,内容为订阅这个partition的consumer id;同时包含一个offset registry,内容为上一次订阅的offset。

consumer消费消息是以一个partition为单位,所以partition会和consumer以socket链接
同一个消费组,同一时间只能有一个consumer消费消息
同一个消费组里面的消费者不会重复消费消费

Kafka一些重要设计思想
下面介绍先大体介绍一下Kafka的主要设计思想,可以让相关人员在短时间内了解到kafka相关特性,如果想深入研究,后面会对其中每一个特性都做详细介绍。

Consumergroup:各个consumer可以组成一个组,每个消息只能被组中的一个consumer消费,如果一个消息可以被多个consumer消费的话,那么这些consumer必须在不同的组。

消息状态:在Kafka中,消息的状态被保存在consumer中,broker不会关心哪个消息被消费了被谁消费了,只记录一个offset值(指向partition中下一个要被消费的消息位置),这就意味着如果consumer处理不好的话,broker上的一个消息可能会被消费多次。

消息持久化:Kafka中会把消息持久化到本地文件系统中,并且保持极高的效率。

消息有效期:Kafka会长久保留其中的消息,以便consumer可以多次消费,当然其中很多细节是可配置的。

批量发送:Kafka支持以消息集合为单位进行批量发送,以提高push效率。

push-and-pull : Kafka中的Producer和consumer采用的是push-and-pull模式,即Producer只管向broker push消息,consumer只管从broker pull消息,两者对消息的生产和消费是异步的。

Kafka集群中broker之间的关系:不是主从关系,各个broker在集群中地位一样,我们可以随意的增加或删除任何一个broker节点。

负载均衡方面: Kafka提供了一个 metadata API来管理broker之间的负载(对Kafka0.8.x而言,对于0.7.x主要靠zookeeper来实现负载均衡)。

同步异步:Producer采用异步push方式,极大提高Kafka系统的吞吐率(可以通过参数控制是采用同步还是异步方式)。

分区机制partition:Kafka的broker端支持消息分区,Producer可以决定把消息发到哪个分区,在一个分区中消息的顺序就是Producer发送消息的顺序,一个主题中可以有多个分区,具体分区的数量是可配置的。分区的意义很重大,后面的内容会逐渐体现。

离线数据装载:Kafka由于对可拓展的数据持久化的支持,它也非常适合向Hadoop或者数据仓库中进行数据装载。

插件支持:现在不少活跃的社区已经开发出不少插件来拓展Kafka的功能,如用来配合Storm、Hadoop、flume相关的插件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值