零基础掌握Kafka

Apache Kafka是当前最流行的分布式流处理平台之一,由LinkedIn开发并于2011年开源。它被设计用于高吞吐量、低延迟的场景,广泛应用于日志收集、流处理、事件源等多种场合。本文将带你从零开始学习Kafka,并通过Java代码示例展示如何发送消息。

第一部分:Kafka基础知识

1.1 Kafka简介

Kafka是一个分布式的、可分区的、可复制的消息系统,它主要用于处理大规模实时消息。Kafka的设计目标是高吞吐量、持久存储和低延迟处理。

1.2 核心概念

  • Broker:Kafka集群包含一个或多个服务器,这些服务器被称为broker。
  • Topic:消息的分类。在Kafka中,每条消息属于一个特定的topic。
  • Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(服务器)上,一个topic可以分为多个partition。
  • Producer:消息和数据的生产者,负责创建消息,然后将其发布到Kafka topic。
  • Consumer:消息的消费者,订阅数据并处理其接收的数据。
  • ZooKeeper:Kafka用来保持集群配置一致性的服务,它用于管理broker节点的状态以及进行领导者选举。

1.3 Kafka工作流程

  1. 生产者将消息发送到Kafka服务器中的topic。这些消息存储在topic的partition中。
  2. 消费者订阅一个或多个topic,并从broker拉数据来进行处理。
  3. Kafka中的每个partition都有序地存储接收到的消息,并且每条消息在partition中都有一个唯一的序号,称为offset。

第二部分:Kafka的安装和基本操作

2.1 安装Kafka

Kafka依赖于ZooKeeper,因此需要先安装ZooKeeper。可以通过以下步骤在本地环境中安装Kafka和ZooKeeper:

  1. 下载Kafka:访问Apache Kafka官网下载最新版本的Kafka。
  2. 解压Kafka:解压下载的文件至您选择的目录。
  3. 启动ZooKeeper服务
    bin/zookeeper-server-start.sh config/zookeeper.properties
    
  4. 启动Kafka服务
    bin/kafka-server-start.sh config/server.properties
    

2.2 创建和管理Topic

  • 创建Topic
    bin/kafka-topics.sh --create --topic quickstart --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1
    
  • 查看所有Topic
    bin/kafka-topics.sh --list --bootstrap-server localhost:9092
    

第三部分:使用Java进行消息发送

3.1 环境准备

确保你的机器上安装了Java和Maven。我们将使用Maven来管理项目依赖。

3.2 创建Maven项目

在你选择的IDE中创建一个新的Maven项目,添加以下依赖到pom.xml文件中:

<dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>2.8.0</version></dependency>
</dependencies>

3.3 编写生产者代码

创建一个Java类KafkaProducerExample.java,并添加以下代码:

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.RecordMetadata;
import java.util.Properties;public class KafkaProducerExample {public static void main(String[] args) {// 设置连接Kafka的初始配置Properties props = new Properties();props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");// 创建生产者实例KafkaProducer<String, String> producer = new KafkaProducer<>(props);try {for (int i = 0; i < 100; i++) {// 发送消息ProducerRecord<String, String> record = new ProducerRecord<>("quickstart", "key-" + i, "value-" + i);producer.send(record, (RecordMetadata metadata, Exception exception) -> {if (exception == null) {System.out.printf("Sent message: (key=%s, value=%s) at offset %d%n", record.key(), record.value(), metadata.offset());} else {exception.printStackTrace();}});}} finally {// 关闭生产者,释放资源producer.close();}}
}

3.4 运行和验证

运行KafkaProducerExample.java,并观察控制台输出。你将看到消息被发送到Kafka,并打印出每条消息的键、值和偏移量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/10552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

scrapy的入门

今天我们先学习一下scrapy的入门,Scrapy是一个快速的高层次的网页爬取和网页抓取框架&#xff0c;用于爬取网站并从页面中提取结构化的数据。 1. scrapy的概念和流程 1.1 scrapy的概念 我们先来了解一下scrapy的概念,什么是scrapy: Scrapy是一个Python编写的开源网络爬虫框架…

AI学习指南概率论篇-贝叶斯推断

AI学习指南概率论篇-贝叶斯推断 概述 在人工智能中&#xff0c;贝叶斯推断是一种基于贝叶斯统计理论的推理方法。它通过使用概率论的知识&#xff0c;结合先验信息和观测数据&#xff0c;来更新对未知变量的推断。贝叶斯推断提供了一种合理的方法来处理不确定性&#xff0c;并…

ubuntu 相关操作

ubunt-desktop卸载重安 sudo apt-get purge ^gnome-.* sudo apt-get autoremove --purge sudo apt-get update sudo apt-get install ubuntu-desktop清理 # 检查日志大小 journalctl --disk-usage# 只保留一周的日志 sudo journalctl --vacuum-time1w# 只保留500MB的日志 …

JS遍历数组的十种方法总结

​​​ 目录 一、for 循环遍历 二、for ... of 方法 三、for...in循环 四、forEach 遍历 五、map 映射 六、filter方法 七、reduce高阶函数&#xff08;迭代&#xff08;累加器&#xff09;&#xff09; 八、every 九、some 十、find 一、for 循环遍历 for循环是最…

Mac 双网卡

Mac 使用了双网卡, 一个网线, 一个WIFI. 局域网走一个网卡, ip 段是 192.168.10.0/24外网走一个网卡, ip 段是 192.168.50.0/24 1. 添加静态路由 为局域网添加静态路由, 192.168.10.0/24 无需为自己这个段添加静态路由. 在局域网中, 如果还有其他的网段(例如 192.168.20.0/…

WebSocket前后端建立以及使用

1、什么是WebSocket WebSocket 是一种在 Web 应用程序中实现双向通信的协议。它提供了一种持久化的连接&#xff0c;允许服务器主动向客户端推送数据&#xff0c;同时也允许客户端向服务器发送数据&#xff0c;实现了实时的双向通信。 这部分直接说你可能听不懂&#xff1b;我…

王麻子1651商标被王麻子跨类无效宣告!

近日“王麻子1651”商标被王麻子跨类无效宣告&#xff0c;最后不予注册&#xff0c;普推知产老杨了解“王麻子”是我国著名的老字号&#xff0c;创始于1651年&#xff0c;以刀剪闻名于世&#xff0c;刀剪的商标分类主要是在8类手工器械&#xff0c;而被无效宣告的商标在16类办公…

手机电脑通用便签推荐 好用便签下载

便签软件作为一种日常记录和管理工具&#xff0c;其实用性和便捷性深受用户喜爱。一款优秀的便签软件不仅能帮助我们随时随地记录重要信息&#xff0c;还能有效提高工作效率。然而&#xff0c;市场上很多便签应用仅限于单一平台使用&#xff0c;对于需要在手机和电脑间频繁切换…

游戏行业该如何选择适合的服务器?

游戏行业在互联网社会中发展的越来越好&#xff0c;当然每一款游戏的运行都是需要强大的服务器来支撑的&#xff0c;那么选择一个好的服务器会给企业带来更好的成果&#xff0c;今天万恒小编就来带大家去了解一下再游戏行业中怎样去选择合适的服务器。 首先在游戏这个行业中&am…

python pymysql怎么查询一列的数据

要使用Python的pymysql库查询MySQL数据库中一列的数据&#xff0c;你需要首先安装pymysql库&#xff08;如果尚未安装&#xff09;&#xff0c;然后建立与数据库的连接&#xff0c;并执行SQL查询语句。以下是一个简单的例子&#xff1a; 首先&#xff0c;安装pymysql库&#x…

如何到《新英格兰医学杂志》 NEJM查找下载文献

《新英格兰医学杂志》NEJM是世界上阅读、引用最广泛、影响力最大的综合性医学期刊之一。NEJM集团出版的期刊还包括NEJM Journal Watch、NEJM Catalyst及NEJM Evidence。NEJM是一份全科医学周刊&#xff0c;出版对生物医学科学与临床实践具有重要意义的一系列主题方面的医学研究…

《墨菲定律》读后感

《墨菲定律》这本书的书名有很大的迷惑性&#xff0c;因为墨菲定律的占幅不到全书的百分之一。这本书比较系统地总结了一些耳熟能详的可称之为人类社会运行的规律和法则&#xff0c;虽然书的内容还是多少有点“心灵鸡汤”的感觉&#xff0c;但好在涉及的范围足够广&#xff0c;…

ECS中播放 Animator 动画和控制Gameobject 显示状态

1、要在 ECS&#xff08;Entity Component System&#xff09;中播放 Animator 动画&#xff0c;需要先创建一个包含 Animator 组件的 Entity&#xff0c;并在相应的 System 中更新该 Entity 的 Animator 组件。以下是一个简单的示例代码&#xff1a; using Unity.Entities; us…

目标检测YOLO实战应用案例100讲-基于深度学习的交通场景多尺度目标检测算法研究与应用(中)

目录 3.4 实验结果与分析 深度融合注意力跨尺度复合空洞残差交通目标检测算法

漫谈:C C++ 嵌套包含与前置声明

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 目录 嵌套包含导致无限 要有…

盛邦安全拟战略收购卫星通信加密厂商天御云安

近日&#xff0c;远江盛邦&#xff08;北京&#xff09;网络安全科技股份有限公司&#xff08;以下简称“盛邦安全”&#xff0c;股票代码:688651)对外公布&#xff0c;拟使用自有资金不超过人民币3000万元持有北京天御云安科技有限公司&#xff08;以下简称“天御云安”&#…

electron 视频抓图并保存图片到本地

1. 思路&#xff1a; 1.1 通过canvas生成一块画布&#xff0c;在画布上绘制图形 let videoEl document.getElementById("testVideo");let params {videoEl,quality:0.95}let canvasEl document.createElement(canvas);canvasEl.width videoEl.width;canvasEl.he…

开启多线程下变量共享与私有问题

开启多线程下变量共享与私有问题 &#x1f335;ThreadLocal和Atomic是Java中用于多线程编程的两个重要工具。 ThreadLocal是一个线程局部变量&#xff0c;它为每个线程提供了独立的变量副本&#xff0c;确保每个线程都可以访问自己的变量副本而不会影响其他线程的变量。在多线…

json-server 模拟接口服务

前端开发经常需要模拟接口请求&#xff0c;可以通过 json-server 实现。 1. 安装 json-server 在前端项目的终端命令行中执行 npm i json-server2. 创建数据源 在项目中新建文件 db.json &#xff0c;与 package.json 同级&#xff0c;内容为模拟的数据 注意 json 文件对格式…

选择步入式高低温试验室价格除外还需要考虑哪些方面?

选择步入式高低温试验室时&#xff0c;价格是一个非常重要的考虑因素。但是&#xff0c;步入式高低温试验室价格不仅仅是主要决定因素&#xff0c;我们还需要考虑到设备的性能、质量、可靠性以及售后服务等多方面因素。接下来给大家具体介绍的关于选择步入式高低温试验室价格除…