初试kafka后的一点感性的想法

2023-10-31 16:21

本文主要是介绍初试kafka后的一点感性的想法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

偶然的机会吧,就接触到了Kafka,这看样子和我的“本业”是相冲突的。

  我并不擅长业务编程,对应用层的业务逻辑处理也是一直无感,也不曾想过在这一层的某某领域大有建树,在APP in anywhere的时代,看样子我是最坚定不移地永不进坑的人,我只想深挖计算机网络底层的技术细节,老实本分地做一个筑路工,把路修好了,管它上面跑的是奥迪还是奥拓,这些与我无关…

  阴错阳差的,我要做和kafka相关的事了,当我知道这件事的时候,其实在我内心里,我是拒绝的,然而我并没有拒绝,总之,从未经历过的东西先试试看咯,真搞不定,那也是没办法,至少去尝试了。嗯,我跟同事,朋友还有家人都是这么讲的,态度比过程重要,到时候没做成,至少我的态度是端正的,问题可以出在技术层面,自己也可以术业不精,但是态度必须端正,这是基本原则。


kafka是个什么玩意儿?明确的说,上周接到这个任务的时候,我整整讨厌它讨厌了一天,我几乎从不加班,但为了让自己彻底恶心一把(打架前先把自己弄疼弄流血,这样打起来比较狠…),竟然加班学习这玩意儿了…而且还在晚九点钟下班的路上寻思着用什么尖酸刻薄的语言发一篇朋友圈,以表达对kafka的愤恨!但是我没有,因为我仔细琢磨后发现kafka还是有点意思的。当初骂娘的时候,那是因为不懂,其实现在也不懂,只是稍微懂了一点。

  我就不扯kafka的概念了,我就说,理想中的模块间的交互是下面的样子:
这里写图片描述

但实际上,绝大多数的程序员会把系统搞成下面的样子:
这里写图片描述

别人不说,我自己就干过这样的事。当时我的产品甚至没有复杂的业务逻辑要处理,就是一个简单的加密机网络设备,我使用的技术也不外乎就Netfilter,Policy Routing等,在最后整理设计文档的时候,需要画模块图,我竟然无法做到不使用交叉线而把模块间关系理清

  kafka可以做到,它可以让你的系统成为下面的样子:
这里写图片描述

中间那颗红星就是kafka扮演的角色。我这么把kafka画成一颗红星似乎把它的重要性放大化了,想想也是,kafka无非也就是一个普通的开源组件,它的地位有这么重要吗?…kafka本身并不是很重要,这里重要的是kafka表达的思想。

  这让人想起广播式以太网到交换式以太网的进化,以太网交换机一出鞘似乎就把以太网从同轴电缆的冲突域里永久地拯救了出来,从此一路康庄大道,直到现在依然是气吞万里如虎。同样让人想起IP路由器的作用,可以将来自不同应用,经由不同链路的消息通过统一的IP数据报的方式逐跳递送到目的地。

  kafka采用了同样的思路。层次不同而已。这是kafka的本质,至少是我理解到的目前,觉得这就是它的本质。就像我十几年前刚开始琢磨路由器和交换机的时候,也是这么想的。如果这是对的,我应该过不了多久就能精通kafka了。

  考虑到应用层组件之间交互的复杂性,同时又要尽可能帮助组件之间解耦,kafka不假设自己和任何组件有亲密关系,即它的发布订阅模式对于每一个生产者和每一个消费者是一视同仁的,我认为这个设计理念及其好,它似乎可以推导出几个kafka最为关键的特性。为什么呢?

  如果一个消费者把消息取走了,另一个消费者又来取,怎么办?如果消息一旦取走就消失,那么kafka的broker和消费者之间就有了协议,协议的目的是为了商定交互的语义,有交互自然会产生效果,随着交互组件的增多,这种所谓的效果将会非常难以集中管理,这势必会对kafka造成巨大的压力,严重影响可扩展性。什么都不做是最好的选择。因此落地持久化策略存储显得好像就是一个必然的选择一样,东西就保存在那里,随便谁随便什么时候来拿都OK(当然,所谓的策略化落地指的就是这个消息能存多久,这个是由broker自己来控制的)。offset管理就成了设计中消费者消费消息的游标,这也是自然而然的,既然broker什么都不管了,那么显然需要消费者自己来管理咯。

  再说存储设计。既然都持久化落地存储了,增删改查的效率就是问题,虽然cache的思想能解决这个问题,但是考虑到cache严重依赖局部性原则,所以它只能解决带有局部性特征的交互扩展性问题,这就是交互行为有了要求。而正确的,一劳永逸的做法则是重新设计存储模型。自然而然的,主题分区,区内分段便被设计来解决扩展性问题,而稀疏索引则永驻内存,用来在工程上优化本来已经很优秀的算法。


由于我也是刚刚接触kafka这个玩意儿,觉得挺有意思就随便写了点。我这里再给出一个类比。

  也许你早就不使用中国邮政的服务了吧,现在都不写信了,而且快递东西都是走私营的快递公司,比如顺丰,圆通这类。其实,中国邮政的快递物流业务还是比较像kafka的,why?因为它不送货上门,并且长时间帮你保存东西,只要到时候取件时交保管费就行。


前面的牢骚和浅析应该可以证明kafka可能将会是我骂了之后会成为朋友的那种,这会儿也刚刚看完《Kafka权威指南》的前几章,家人也都睡了,就撩开半瓶真露随意写上几笔。

  在我毕业那年,向往华为的网络技术已有两年有余,然而华为根本不会接收大专生,而我只是一个写Java的,就准备放弃网络技术投身于应用开发,曾经追过一段Spring,EJB之类的,记得当时还是JDK 1.4…也是很怀念那段时光的,刚刚我老婆转给我一篇文章《嘿,破街》,这描绘了我学Java的那两年熟悉的街道…到了长春参加工作,我写了一年半的Java,有幸一位恩师让我懂了一点iptables,然后就发现原来在没有交换机路由器的情况下也能玩网路,Linux可以扮演任何角色…再后来就不那么向往华为了,不过一直还是想搞网络,也确实一直在搞网络相关的,直到一个月前…

  也不知道到底能不能玩转kafka,但我预感是可以的,这种事情以前经常发生,一开始是iptables,然后是Box 2D,再然后是OpenVPN,…现在是Kafka…
这里写图片描述

这篇关于初试kafka后的一点感性的想法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/316616

相关文章

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

IDEA中的Kafka管理神器详解

《IDEA中的Kafka管理神器详解》这款基于IDEA插件实现的Kafka管理工具,能够在本地IDE环境中直接运行,简化了设置流程,为开发者提供了更加紧密集成、高效且直观的Kafka操作体验... 目录免安装:IDEA中的Kafka管理神器!简介安装必要的插件创建 Kafka 连接第一步:创建连接第二步:选

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

Java消息队列:RabbitMQ与Kafka的集成与应用

Java消息队列:RabbitMQ与Kafka的集成与应用 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在现代的分布式系统中,消息队列是实现系统间通信、解耦和提高可扩展性的重要组件。RabbitMQ和Kafka是两个广泛使用的消息队列系统,它们各有特点和优势。本文将介绍如何在Java应用中集成RabbitMQ和Kafka,并展示它们的应用场景。 消息队

Kafka (快速)安装部署

文章目录 1、软件下载&配置环境1_JDK安装2_Zookeeper安装3_Kafka安装 2、单机安装1_配置主机名和IP映射2_单机Kafka配置 3、集群安装1_配置主机名和IP的映射关系2_时钟同步3_Zookeeper配置信息4_集群Kafka配置 4、kafka的其他脚本命令 1、软件下载&配置环境 下面的操作无论是单机部署还是分布式集群环境下都是通用的。 准

Kafka 分布式消息系统详细介绍

Kafka 分布式消息系统 一、Kafka 概述1.1 Kafka 定义1.2 Kafka 设计目标1.3 Kafka 特点 二、Kafka 架构设计2.1 基本架构2.2 Topic 和 Partition2.3 消费者和消费者组2.4 Replica 副本 三、Kafka 分布式集群搭建3.1 下载解压3.1.1 上传解压 3.2 修改 Kafka 配置文件3.2.1 修改zookeep

超声波清洗机哪个品牌比较好一点的?清洁力强的超声波清洗机品牌

随着生活水平的不断提升和幸福感的增强,珠宝、饰品和眼镜等物品已成为许多家庭的常备之物。然而,这些贵重细小的物件易于积聚微尘与隐形细菌,长此以往可能悄悄影响家人的健康,毕竟细菌是肉眼难以察觉的隐患。超声波清洗机应运而生,它以高科技手段有效地解决了这一隐忧,深层清洁,守护家人免受微小污染物的潜在威胁。不过现在市面上超声波清洗机品牌挺多的,究竟有哪些品牌的超声波清洗机比较好一点呢?接下来就为大家带来四款

关于并发的一些想法

1.多个用户同时访问一个网站系统是并发,也会造成并发问题(但这个问题不是线程间的并发问题,不是对临界变量的并发问题。这个很容易混淆的)。这里造成的并发的问题是由于用户过多发出的http的请求过多,程序排队处理这些请求,同时,对于同一个数据库和同一tomcat来承受这些请求(可能千万个请求),同时服务器的cpu和内存等都会有问题,必然导致用户响应界面效果不好,产生卡顿现象。因此,才有了分布式、集群、

sobel_dir 方向图和sobel的一些想法

怎么使用呢! 1,通过方向图可以提取 直线 或水平线region区域,提出来的dirregion区域 2,通过sobel的幅度度,分割出变化剧烈的区域 fuduregion 3,两个region相交,可以准确定位幅度范围内+方向的边界 4,sobel算子是可以只做x,y方向的单项幅度图的,sobel_amp在一定场合有特别的用处,值得关注 5,关于大掩码超过3的size,要注意的

Kafka 实战演练:创建、配置与测试 Kafka全面教程

文章目录 1.配置文件2.消费者1.注解方式2.KafkaConsumer 3.依赖1.注解依赖2.KafkaConsumer依赖 本文档只是为了留档方便以后工作运维,或者给同事分享文档内容比较简陋命令也不是特别全,不适合小白观看,如有不懂可以私信,上班期间都是在得 1.配置文件 Yml配置 spring:kafka:bootstrap-servers: cons