Kafka学习一

Kafka学习一

Kafka最初由LinkedIn公司采用Scala开发的一个多分区、多副本、基于zookeeper实现的 分布式消息系统
定位:分布式流式处理平台
特性:高吞吐、可持久化、可水平扩展、支持流数据处理
它的应用:消息系统、存储系统、流式处理平台

Kafka体系结构
     包含若干Producer、若干个Broker、若干个Consumer、一个ZooKeeper集群
其中:
      Zookeeper负责集群元数据的管理、控制器的选举等
      Producer(生产消息)发送消息主题(其中一个消息主题包含多个分区,也即同一主题下的不同分区的消息是不同的)到Broker(通常集群环境下,你可以将其理解为一台Kafka服务器),Broker负责将收到的消息存到磁盘中,而Consumer(消费消息,进行业务逻辑处理)负责从Broker订阅并消费消息

   主题与分区:Topic与Partition,一个主题对应一个或多个分区。Kafka中的消息以主题为单位进行分类,生产者将消息发送到特定的主题,使得消费者可以对消息进行订阅与消费
同时分区在存储层面,可以看出一个可追加的日志文件,消息在被追加到分区日志文件的时候会分配一个特定的偏移量(offset)。
偏移量(offset)是消息分区的标识,同时它是消息有序的保障。

       Kafka为分区引入了多副本(Replica)机制,通过增加副本数量来提升容灾能力。同一个分区的不同副本中保存的消息是相同的,副本之间是一主多从的关系,也即副本中也存在leader(负责处理读写请求)和follower(进行副本同步)。副本处于不同的broker中,当leader副本出现故障时,从follower副本中重新选举出新的leader副本对外提供服务。Kafka通过多副本机制实现了故障的自动转移,当kafka集群中某个broker失效时依然能够保证服务可用。

       消费者也具备一定的容灾能力,Consumer使用pull模式从服务端拉取消息并保存消费者的具体位置,当宕机的时候可以根据之前保存的消费者的位置重新进行拉取和消费,从而保证消息不丢失。

      分区中所有副本统称为为AR,所有leader副本保持一定程度同步的副本组成ISR,而滞后的副本组成OSR。它们之间的关系:
AR=ISR+OSR(OSR为0时,同步)

       如果一个日志文件中有9条消息,其中第一条消息的Offset为0,最后的一条的Offset为8,offset为9的消息用虚线表示,代表下一条待写入的消息。日志的HW为6表示消费者只能拉取到Offset在0到5之间的消息,而Offset为6的消息对消费者而言不可见。

一个简单的生产者和消费者
      搭建好Linux环境之后,通常在客户端,我们需要引入kafka-clients的依赖,进行代码与服务器端的交互。
     生产者:创建一个生产者实例,当然需要设置一些参数,然后构建ProducerRecord对象,通常包含发送的主题、消息的消息体、接着将消息发送到服务器,关闭生产者回收资源。同时在kafka0.11.x开始引入消息头headers字段。
在消息发送的时候,send()方法对应了三种方式:
      发后既忘(fire-and-forget)、同步(sync)、异步(async)
      发后既忘:只管发送,性能最高,可靠性最差,会造成消息丢失
       因此在KafkaProducer的send()方法可以看到,其具有返回值,是Future类型,保证消息发送的状态,保证消息不丢失。而采用异步的方式,Future中带有Callback的回调函数,实现对消息的异步发送,我们知道Callback是具有返回值的。
通常,一个KafkaProducer不会只负责发送单条消息,更多的是发送多条消息,在发送完这些消息后,关闭回收资源
消费者:创建一个消费者实例配置参数,然后订阅主题,进行消费

序列化Serializer
       生产者通常对消息进行序列化(将对象转成字节数组),消费者进行消息的反序列化(将字节数组转成对象)。

分区器
    消息发送到broker中,可能需要经过拦截器、序列化器、分区器之后到broker。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值