kafka学习总结

本文深入探讨了Kafka作为消息中间件的各个方面,包括其整体架构、重要组件(如生产者、Broker和消费者)的工作原理、Kafka与Zookeeper的交互、高可用性策略以及常见问题。内容涵盖了版本差异、生产者消息发送、Broker的数据存储、Consumer消费流程、Zookeeper在Kafka中的角色以及Controller和Partition的Failover机制。
摘要由CSDN通过智能技术生成

前言

最近在公司内部进行了一个知识分享,主题是kafka。分享ppt我会上传放在文末。我为了准备这个分享,几乎花了完整两周时间,看了两本书,阅读了几十篇博客,从中提炼出几十页ppt拿出来演讲,分享完后总感觉自己还有很多东西没有讲出来。
这次就把我两个星期的学习成果形成博客。便于自己回顾和大家分享。

主要内容

  • kafka系统架构概要介绍
  • kafka重要组件
  • kafka文件存储
  • zookeeper与kafka
  • 高可用kafka
  • kafka常见问题

kafka整体架构

kafka定义

:在kafka0.8.x版本的时候,kafka主要是作为一个分布式的、可分区的、具有副本数的日志服务系统, 具有高水平扩展性、高容错性、访问速度快、分布式等特性;主要应用场景是:日志收集系统和消息系统

:0.10.x版本及以上,Kafka是一个分布式的流处理平台(数据注入功能,数据存储功能,流处理功能)

注:今天主要还是讲它作为一个消息中间件的功能作用,kafka各个版本内部处理有差异,如何分享是一个挑战。学习的时候一定要带上版本的概念,因为网上很多资料都没有说明版本,然后会造成理解偏差。我们这次主要分享新版本kafka

架构图

kafka大体架构图如下:
Kafka

名词解释

  • Broker Kafka集群中的服务器
  • Topic 每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic
  • Partition Partition是物理上的概念,每个Topic包含一个或多个Partition
  • Replica Partition 的副本,保障 partition 的高可用
  • Producer 消息生产者 负责发布消息到Kafka broker
  • Consumer 消息消费者,向Kafka broker读取消息的客户端
  • Consumer Group 每个 consumer 都属于一个 consumer group

Kafka重要组件

生产者(Producer)

生产这消息发送过程如下图:
Broker sendMsg

解读
ProducerRecord:每个消息是一个ProducerRecord对象,其中Topic和Value值必填,partition和key非必填。
过程
send()方法大致过程为:
设置序列化器->设置分区->放入队列缓存->等待时机push到broker
注:
不是直接发送给服务端,而是先在客户端把消息放入队列中, 然后由一个消息发送线程从队列中拉取消息,以批量的方式发送消息给服务端。 Kafka的记录收集器( RecordAccumulator)负责缓存生产者 客户端产生的消息,发送线程(Sender)负责读取记录收集器的批量消息,通过网络发送给服务端。为了保证客户端网络请求的快速响应,Kafka使用选择器( Selector) 处理网络连接和读写处理,使用 网络连接( NetworkClient)处理客户端网络请求。

生产者选择分区

选择分区流程图如下:
ProducerPartitionSelect
其中,散列化方法为:Utils.murmur2(keyBytes)

序列化器和发送

发送方式
新版本客户端提供两种发送方式,同步和异步:
ProducerSend

可以发现,两个方法其实都是异步返回。
同步方式,第一种,调用send()后,马上get(),实现同步调用。
异步方式,第二种,在callback中进行内容处理,实现异步调用。

序列化器
可以使用内置序列化器,比如StringSerializer,IntegerSerializer,ByteArraySerializer等基本的序列化器。
也可以自定义,需要实现org.apache.kafka.common.serialization.Serializer接口

注:官方建议不要自定义序列化器,因为在消费端,需要使用同样的反序列化器。使用kafka自带的,可以避免很多问题。

生产者配置

kafka重要的配置文件有三个:
server.properties
broker.properties
consumer.properties
都可以去这里查看配置的意义和解释&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值