当前位置: 首页 > news >正文

Kafka 入门 (一)

Kafka 入门(一)

Apache Kafka起源于LinkedIn,后来于2011年成为开源Apache项目,然后于2012年成为First-class Apache项目。Kafka是用Scala和Java编写的。 Apache Kafka是基于发布订阅的容错消息系统。 它是快速,可扩展和设计分布。

什么是Kafka?

Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端点传递到另一个端点。 Kafka适合离线在线消息消费。 Kafka消息保留在磁盘上,并在集群内复制以防止数据丢失。 Kafka构建在ZooKeeper同步服务之上。 它与Apache Storm和Spark非常好地集成,用于实时流式数据分析。

优点

高吞吐量和低延迟(High throughput and low lattency):Kafka 设计时就考虑了高吞吐量和低延迟的特点,能够处理高并发的消息传递,同时支持快速、实时的数据处理和分析。
可靠性和容错性 (Reliability and fault-tolerance):Kafka 采用分布式架构,允许多个节点组成集群,支持数据的分区和副本备份,提供了高可用性和容错性。即使某个节点出现故障,也不会影响整个系统的正常运行。
可扩展性 (Scalability):Kafka 集群可以根据实际需求进行水平扩展,只需要增加节点即可。同时,Kafka 的设计也支持多数据中心的部署方式,可以将数据传递到不同的数据中心,以满足不同的需求。
灵活性(Flexibility):Kafka 支持多种数据源和数据格式,可以处理各种类型的数据,包括结构化数据、半结构化数据和非结构化数据。同时,Kafka 也支持多种消费者和生产者的语言和协议,如 Java、Python、C++、REST 等。
可定制性(Customizability):Kafka 提供了可插拔的 API 和插件机制,用户可以自定义各种插件,如自定义序列化和反序列化插件、自定义存储插件等。
易于使用和管理(Easy to use and management):Kafka 的 API 和配置都相对简单,使用和管理起来相对容易。同时,Kafka 还提供了丰富的监控和管理工具,如 Kafka Manager、Kafka Monitor 等,方便用户进行管理和监控。

通常使用场景

消息传递(Messing):将数据从一个系统传输到另一个系统。例如,一个应用程序可以将消息写入Kafka主题,另一个应用程序可以从该主题读取这些消息并执行相应的操作。这个用例可以用于许多不同的场景,如应用程序集成、实时流处理、日志处理等。与RabbitMQ不同之处,RabbitMQ只能消费一次,Kafka可以多次消费。
网站活动跟踪(Website Activity Tracking):收集和处理网站活动跟踪数据。网站活动跟踪数据通常以事件的形式生成,例如页面浏览、搜索、购物车添加等。这些事件可以写入Kafka主题,然后可以用于实时监控、实时处理或离线处理和报告生成。
数据指标(Metrics):聚合和处理各种数据指标。例如,一些应用程序会将指标数据写入Kafka主题,例如应用程序的请求响应时间、错误率、吞吐量等。这些数据可以用于监控应用程序性能和健康状况,并根据需要进行实时或离线处理和报告生成。
日志聚合(Log Aggregation):聚合和处理各种日志数据。许多应用程序会将日志数据写入Kafka主题,例如应用程序日志、服务器日志、安全日志等。这些数据可以用于实时监控、离线处理和报告生成、故障排除等。
流处理(Stream Processing):流处理是一种数据处理模式,可以在数据到达时立即对其进行处理。Kafka提供了流处理库,如Kafka Streams和KSQL,可以用于构建实时流处理应用程序。这些应用程序可以用于各种场景,如实时监控、实时报警、实时分析等。
事件源(Event sourcing):事件源是一种数据源,它以事件的形式生成数据。例如,一个传感器可以生成事件,指示当前温度或湿度。Kafka可以用于收集和处理这些事件,然后将其转换为有用的信息。
提交日志 (Commit Log):提交日志是一种记录系统状态的机制,它可以用于恢复系统状态或进行故障排除。例如,Kafka消费者将消费偏移量写入提交日志中,以便在发生故障时可以恢复到正确的位置。

基本概念

主题(Topic):消息的逻辑容器,每个消息都属于一个主题。主题可以看作是消息流的类别,可以拥有多个生产者和消费者。
分区(Partition):每个主题可以被分成多个分区,每个分区是一个有序的消息队列。分区可以提供更高的并发性和伸缩性,同时还可以实现数据冗余和备份。
生产者(Producer):负责向主题中写入消息的应用程序,可以将消息发送到指定的主题和分区。
消费者(Consumer):从主题中读取消息的应用程序,可以订阅一个或多个主题和分区,并从中读取消息。
代理(Broker):Kafka 集群中的每个节点都是一个代理,负责接收来自生产者和消费者的消息,并将其存储在本地磁盘上的分区中。
偏移量(Offset):每个分区中的每条消息都有一个唯一的偏移量,表示该消息在分区中的位置。消费者可以通过偏移量来跟踪其读取的位置。
消费者组(Consumer Group):多个消费者可以组成一个消费者组来共同消费一个或多个主题。在一个消费者组中,每个消费者都负责消费其中一个或多个分区中的消息。
复制(Replication):使用副本机制来提高数据的可靠性和容错性。每个分区可以配置多个副本,其中一个副本作为领导者(Leader),负责处理生产者和消费者的请求,其他副本作为追随者(Follower),复制领导者的数据并提供备份。

Kafka及生成消费Topic事件

1. 获取 Kafka

下载 Kafka

2. Kafka 安装并启动

$ tar -xzf kafka_2.13-3.4.0.tgz
$ cd kafka_2.13-3.4.0
# Start zookeeper
$ bin/zookeeper-server-start.sh config/zookeeper.properties
# open a new session
# generate random cluster id
$ KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"
$ echo $KAFKA_CLUSTER_ID
PiqNzmreRbqqlua4uUt3ZQ
# delete files under /tmp as below
$ rm -rf /tmp/kafka-logs /tmp/zookeeper /tmp/kraft-combined-logs
# modify config/kraft/server.properties relevant ip
# controller.quorum.voters=1@192.168.79.177:9093
# listeners=PLAINTEXT://192.168.79.177:9092,CONTROLLER://192.168.79.177:9093
# advertised.listeners=PLAINTEXT://192.168.79.177:9092
$ bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties
Formatting /tmp/kraft-combined-logs with metadata.version 3.4-IV0.
$ bin/kafka-server-start.sh config/kraft/server.properties

3. 创建Topic

$ bin/kafka-topics.sh --create --topic first-events --bootstrap-server 192.168.79.177:9092
Created topic first-events.
$ bin/kafka-topics.sh --create --topic second-events --bootstrap-server 192.168.79.177:9092
Created topic second-events.

4. 查看Topic

$ bin/kafka-topics.sh --list --bootstrap-server 192.168.79.177:9092
first-events
second-events

5. 查看Topic 分区

$ bin/kafka-topics.sh --describe --topic first-events --bootstrap-server 192.168.79.177:9092
Topic: first-events	TopicId: mRi_1FdLTkS45ay3haaUrA	PartitionCount: 1	ReplicationFactor: 1	Configs: segment.bytes=1073741824Topic: first-events	Partition: 0	Leader: 1	Replicas: 1	Isr: 1
$ bin/kafka-topics.sh --describe --topic second-events --bootstrap-server 192.168.79.177:9092
Topic: second-events	TopicId: 8J2iMtGMQdKD2MjsyCXzyw	PartitionCount: 1	ReplicationFactor: 1	Configs: segment.bytes=1073741824Topic: second-events	Partition: 0	Leader: 1	Replicas: 1	Isr: 1

6. 生产事件/消息

$ bin/kafka-console-producer.sh --topic first-events --bootstrap-server 192.168.79.177:9092
>first-events 01
>first-events 02
# Ctrl+D or Ctrl+C 退出

7. 消费事件/消息

$ bin/kafka-console-consumer.sh --topic first-events --from-beginning --bootstrap-server 192.168.79.177:9092
first-events 01
first-events 02
# open a new session and run the same command
$ bin/kafka-console-consumer.sh --topic first-events --from-beginning --bootstrap-server 192.168.79.177:9092
first-events 01
first-events 02
# Ctrl+C Exit to 

多个消费者消费同一个Topic,可以消费无数次,可以用于事件流。

8. 删除topic

$ bin/kafka-topics.sh --delete --topic second-events --bootstrap-server 192.168.79.177:9092
$ bin/kafka-topics.sh --list --bootstrap-server 192.168.79.177:9092
first-events

相关文章:

Kafka 入门 (一)

Kafka 入门(一) Apache Kafka起源于LinkedIn,后来于2011年成为开源Apache项目,然后于2012年成为First-class Apache项目。Kafka是用Scala和Java编写的。 Apache Kafka是基于发布订阅的容错消息系统。 它是快速,可扩展…...

linux内核开发入门二(内核KO模块介绍、开发流程以及注意事项)

linux内核开发入门二(内核KO模块介绍、开发流程以及注意事项) 一、什么是内核模块 内核模块:ko模块(Kernel Object Module)是Linux内核中的可加载模块,它可以动态地向内核添加功能。在运行时,可…...

设计模式(十七)----行为型模式之模板方法模式

行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为&…...

【嵌入式Linux内核驱动】01_内核模块

内核模块 宏内核&微内核 微内核就是内核中的一部分功能放到应用层 内核小,精简,可扩展性好,安全性好 相互之间通信损耗多 内核模块 Linux是宏内核操作系统的典型代表,所有内核功能都整体编译到一起,优点是效…...

Spring——数据源对象管理和Spring加载properties文件

前面一直都是在管理自己内部创建的对象&#xff0c;这个是管理外部的对象。 这里先使用阿里巴巴的druid来演示。需要在pom.xml中添加如下的依赖 <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1…...

Zeek安装、使用与压力测试

Zeek安装与压力测试Zeek安装、简单使用与压力测试环境Zeek安装zeek简单运行安装PF_RING修改Zeek配置文件&#xff0c;使用PF_RING&#xff0c;实现集群流量压力测试查看zeek日志Zeek安装、简单使用与压力测试 科研需要&#xff0c;涉及到Zeek的安装、使用和重放流量压力测试评…...

【javaEE初阶】第三节.多线程 (进阶篇 ) 死锁

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、"死锁"出现的典型场景二、产生 "死锁" 的必要条件 三、解决 "死锁" 问题的办法 总结前言 今天对于多线程进阶的学习&#…...

基于密集连接的轻量级卷积神经网络,用于使用边云架构的露天煤矿服务识别

遥感是快速检测非法采矿行为的重要技术工具。由于露天煤矿的复杂性&#xff0c;目前关于露天煤矿自动开采的研究较少。基于卷积神经网络和Dense Block&#xff0c;我们提出了一种用于从Sentinel-2遥感图像中提取露天煤矿区域的轻量级密集连接网络-AD-Net&#xff0c;并构建了三…...

无刷高速风筒方案介绍--【PCBA方案】

疫情三年过去&#xff0c;春节后&#xff0c;一个新的开始&#xff0c;大家满怀希望畅谈今年好气象。 三年来一波一波的封城、隔离、核酸&#xff0c;经济压抑到了无以复加的地步&#xff0c;也导致了诸多社会问题的出现。消费力被磨平&#xff0c;人们小心翼翼的生活。 常跟…...

花括号展开II[栈模拟dfs]

栈模拟dfs前言一、花括号展开II二、栈模拟dfs总结参考资料前言 递归调用&#xff0c;代码非常的简洁。但是可以通过显式栈来模拟栈中的内容&#xff0c;锻炼自己的代码能力&#xff0c;清楚知道栈帧中需要的内容。 一、花括号展开II 二、栈模拟dfs 每碰到一个左括号&#xf…...

神经网络分类任务(手写数字识别)

1.Mnist分类任务 网络基本构建与训练方法&#xff0c;常用函数解析 torch.nn.functional模块 nn.Module模块 学习方法&#xff1a;边用边查&#xff0c;多打印&#xff0c;duogua 使用jupyter的优点&#xff0c;可以打印出每一个步骤。 2.读取数据集 自动下载 %matplotl…...

FCN网络(Fully Convolutional Networks)

首个端到端的针对像素级预测的全卷积网络 原理&#xff1a;将图片进行多次卷积下采样得到chanel为21的特征层&#xff0c;再经过上采样得到和原图一样大的图片&#xff0c;最后经过softmax得到类别概率值 将全连接层全部变成卷积层&#xff1a;通常的图像分类网络最后几层是全…...

随想录二刷Day15——二叉树

文章目录二叉树2. 递归遍历二叉树3. 二叉树的迭代遍历4. 二叉树的统一迭代法二叉树 2. 递归遍历二叉树 144. 二叉树的前序遍历 class Solution { public:vector<int> preorderTraversal(TreeNode* root) {vector<int> result;preorder(root, result);return res…...

docker-compose部署kafka服务时如何同时允许内外网访问?

背景 最近在学习kafka相关知识&#xff0c;需要搭建自己的kafka环境。综合考虑后决定使用docker-compose来管理维护这个环境。 docker-compose.yml Bitnami的yml文件就很不错&#xff0c;这里直接拿来用了。 version: "2"services:zookeeper:image: docker.io/bi…...

数据结构刷题(二十):17电话号码的字母组合、39组合总和、40组合总和II

一、电话号码的字母组合题目链接思路&#xff1a;回溯三部曲。确定回溯函数参数&#xff1a;题目中给的 digits&#xff0c;还要有一个参数就是int型的index&#xff08;记录遍历第几个数字&#xff0c;就是用来遍历digits的&#xff0c;同时也代表了递归的深度&#xff09;&am…...

Java面试总结(五)

sleep() 方法和 wait() 方法对比 相同点 两者都可以暂停线程的执行&#xff1b;两者都可以响应中断。 不同点 sleep()方法不会释放锁&#xff0c;wait()方法会释放锁&#xff1b; sleep()方法主要用于暂停线程的执行&#xff0c;wait()方法主要用于线程之间的交互/通信&…...

三维人脸实践:基于Face3D的渲染、生成与重构 <二>

face3d: Python tools for processing 3D face git code: https://github.com/yfeng95/face3d paper list: PaperWithCode 3DMM方法&#xff0c;基于平均人脸模型&#xff0c;可广泛用于基于关键点的人脸生成、位姿检测以及渲染等&#xff0c;能够快速实现人脸建模与渲染。推…...

在linux上部署Java项目

在Linux部署Java环境 要是想要部署java web程序,首先要配置环境 jdk tomcat mysql 安装jdk 推荐的方法是使用yum直接安装openjdk(开源的,与官方的jdk功能差不多),目前使用的最多的就是jdk8系列 yum list | grep jdk 在源上搜索所有关于jdk的文件 devel表示development的意思…...

线性表的接口

线性表的实现方式 顺序表 顺序表是一种线性表的实现方式&#xff0c;它是用一组地址连续的存储单元依次存储线性表中的数据元素&#xff0c;使得逻辑上相邻的元素在物理上也相邻⁴。顺序表可以用数组来实现&#xff0c;它的优点是可以快速定位第几个元素&#xff0c;但是缺点…...

spark三种操作模式的不同点分析

通常情况下,由于mapreduce计算引擎的效率问题,大部分公司使用的基本都是hive数仓spark计算引擎的方式搭建集群,所以对于spark的三种操作方式来进行简单的分析。在日常开发中&#xff0c;使用最多的方式取决于具体的需求和场景。以下是每种方式的一些常见用途&#xff1a;Spark …...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...