Kafka 知识汇总学习

devtools/2024/12/22 16:39:48/

kafka:消息发布队列、具有存储的功能   生产者 消费者
优势:吞吐量高,性能好;
具有良好的伸缩性,支持在线水平扩展;
具有容错性和可靠性;
与大数据生态结合


Kafka 是一个分布式系统,由服务器和客户端组成,它们 通过高性能 TCP 网络协议进行通信。 它可以部署在本地和云中的裸机硬件、虚拟机和容器上 环境。

kafka的消息是以  键值对的形式存储的
一般是三个分区
如果在没有指定key 的情况下,kafka 会以轮询的方式放到分区中
指定key的情况下,会根据key放到指定的分区
三个分区  保证当其中一个坏掉了  其他分区还能正常使用
kafka 通过副本基本,保证数据的可靠性
replication-factor =3  通过这个来设计副本的数量
其中,三个分区中,其中一个当作主分区,也就是leader
写入时 是写入到leader 中,读取的时候也是从leader 中读取的

其他两个副本我们称之为follower ,
follower 用来从leader 中复制数据,
broker 称之为消息代理 broker  负责消息的读写请求,
并把消息写入到磁盘中,
一台服务器 就是一个broker

kafka 依赖zookeeper
所以需要先启动zookeeper  然后在启动 kafka 

kafka  必要配置项:
1.server.properties 必要配置项
broker.id
log.dirs
zookeeper.connect

2. 还有一个重要的配置项就是    监听器 listeners: 指定broker 启动时本机的监听器名称和端口号
listeners: 指定broker 启动时的本机监听端口  ,是给服务端使用的
advertised.listeners: 对外发布的访问ip 和 端口号, 注册到zookeeper 中,给客户端使用

3. 搭建集群环境
此时用的是docker 部署
一个zookeeper 对应三个kafka 的形式
用Linux 下载
 
 通常  kafka 集群部署在内部网络
 
4.分区是最小的并行单位,
一个消费者可以消费多个分区
一个分区可以被多个消费者组里的消费者消费 (是一对多的关系)
5.重点!
生产者 API
 生产消息、同步与异步、消息确认、重试 批量 延迟、事务
 send() 异步发送   异步发送有利于提高生产效率
 异步模型可以理解为 将 快递送到菜鸟驿站 从而提高了送货的效率
 
 另外  kafka 也支持批量发送  设置两个参数最大大小 batch.size  
 延迟时间linger.ms 满足其中一个  就会进行批量的发送
 
 配置 至多一次: Acks = 0  或 Acks = 1 
 至少一次 :Acks = -1   retries >0
 
 消费者API
 
 通常在消息中  加入唯一ID 来保证精确性
 kafka 后来加入了事务
 就是事务的原子性  : 要么全部成功  要么全部失败
 
 isolation-level 事务级别  默认情况下
 default : read_uncommitted  未提交的情况下 也可以读取  也就是脏读
 
 6.kafka 的序列化 和  反序列化
 就是将对象以二进制的方式在网络之间传输或者保存到文件中,
 并可以根据特定的规则进行还原
 object > 二进制  是指的序列化
 二进制 > object  是指的反序列化

 
 优点:节省空间,提高网络传输效率,跨平台,跨语言
 


http://www.ppmy.cn/devtools/2214.html

相关文章

新型物联网创新实践教学体系建设

新型物联网创新实践教学体系建设 一、设计背景 随着物联网技术的快速发展,物联网已成为当今科技创新的重要领域。为了培养能够紧跟物联网技术发展趋势的高素质人才,高校物联网专业教学急需构建一套创新实践教学体系。本毕业设计旨在探索和设计一套新型…

社交创新的标杆:解读Facebook的社交模式

引言 在当今数字化时代,社交媒体已成为人们日常生活和沟通的重要工具。作为全球最大的社交媒体平台,Facebook不仅改变了我们的社交模式,而且对全球的社交文化、商业活动和公共事务产生了深远的影响。本文将深入探讨Facebook的社交模式&#…

yolov8目标检测 部署瑞芯微rk3588记录

1. 前置条件 本地电脑系统,ubuntu20.04 训练代码: 训练代码下载的ultralytics官方代码 SHA:6a2fddfb46aea45dd26cb060157d22cf14cd8c64 训练代码仅做数据修改,类别修改,代码结构未做任何修改 需要准备的代码&#…

视频批量高效剪辑,支持将视频文件转换为音频文件,轻松掌握视频格式

在数字化时代,视频内容日益丰富,管理和编辑这些视频变得愈发重要。然而,传统的视频剪辑软件往往操作复杂,难以满足高效批量处理的需求。现在,一款全新的视频批量剪辑神器应运而生,它支持将视频文件一键转换…

怎么使用JMeter进行性能测试?

一、简介 JMeter是Apache软件基金会下的一款开源的性能测试工具,完全由Java开发。它专注于对我们应用程序进行负载测试和性能测量,最初设计用于web应用程序,现在已经扩展到其他测试功能,比如:FTP、Database和LDAP等。…

如何用Redis高效实现12306的复杂售票业务

12306的售票业务是一个复杂的系统,需要考虑高并发、高可用、数据一致性等问题。使用Redis作为缓存和持久化存储,可以提高系统的性能和可扩展性,以下是一些可能的实现方式: 1 票源信息缓存:将票源信息(如车次…

Pytest精通指南(14)Parametrize之indirect(间接参数)

文章目录 官方概念概念分析官方示例示例分析验证indirect为True但不指定fixture验证indirect为True但不存在fixture 官方概念 概念分析 在pytest的pytest.mark.parametrize装饰器中,indirect参数用于指示是否应该从fixtures中解析参数值,而不是直接使用提…

C++初阶学习第一弹——C++入门(上)

前言: 很高兴,从今天开始,我们就要步入C的学习了,在这之前我们已经对C语言有了不错的了解,对数据结构也有了一些自己的认识,今天开始,我们就进入这个新的主题的学习——C 目录 一、C的发展即其特…