Kafka 详细介绍

news/2025/2/12 20:25:19/

Kafka 详细介绍

1. 概述

Apache Kafka 是一个分布式流处理平台,由 LinkedIn 开发并开源,主要用于构建实时数据管道和流应用。它具备高吞吐量、低延迟、高可扩展性和持久性,广泛应用于日志收集、消息系统、流处理等场景。

2. 核心概念
  • Producer: 生产者,负责将消息发布到 Kafka 的 Topic。
  • Consumer: 消费者,从 Topic 订阅并消费消息。
  • Broker: Kafka 服务器,存储消息并处理客户端请求。
  • Topic: 消息类别,生产者发布消息到 Topic,消费者从中订阅。
  • Partition: Topic 的分区,每个 Partition 是一个有序、不可变的消息序列。
  • Offset: 消息在 Partition 中的唯一标识,消费者通过 Offset 跟踪消费进度。
  • Consumer Group: 消费者组,组内消费者共同消费一个 Topic,每条消息只被组内一个消费者处理。
3. 架构
  • Broker 集群: 多个 Broker 组成集群,提供高可用性和负载均衡。
  • Zookeeper: 管理 Broker 和 Topic 的元数据,协调集群。
  • Producer/Consumer API: 提供生产者和消费者的编程接口。
4. 特点
  • 高吞吐量: 支持每秒百万级消息处理。
  • 低延迟: 消息传递延迟在毫秒级。
  • 持久性: 消息持久化到磁盘,支持数据保留策略。
  • 可扩展性: 通过增加 Broker 和 Partition 实现水平扩展。
  • 容错性: 通过副本机制保证数据不丢失。
5. 使用场景
  • 日志收集: 集中收集分布式系统日志。
  • 消息系统: 解耦生产者和消费者,实现异步通信。
  • 流处理: 实时处理数据流,如点击流分析、实时推荐。
6. 安装与配置
  1. 下载 Kafka: 从 Apache Kafka 官网 下载。
  2. 启动 Zookeeper:
    bin/zookeeper-server-start.sh config/zookeeper.properties
    
  3. 启动 Kafka Broker:
    bin/kafka-server-start.sh config/server.properties
    
  4. 创建 Topic:
    bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
    
  5. 启动 Producer:
    bin/kafka-console-producer.sh --topic test --bootstrap-server localhost:9092
    
  6. 启动 Consumer:
    bin/kafka-console-consumer.sh --topic test --bootstrap-server localhost:9092 --from-beginning
    
7. 常用命令
  • 查看 Topic 列表:
    bin/kafka-topics.sh --list --bootstrap-server localhost:9092
    
  • 查看 Topic 详情:
    bin/kafka-topics.sh --describe --topic test --bootstrap-server localhost:9092
    
  • 删除 Topic:
    bin/kafka-topics.sh --delete --topic test --bootstrap-server localhost:9092
    
8. 客户端编程
  • Java Producer:
    Properties props = new Properties();
    props.put("bootstrap.servers", "localhost:9092");
    props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
    props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");Producer<String, String> producer = new KafkaProducer<>(props);
    producer.send(new ProducerRecord<>("test", "key", "value"));
    producer.close();
    
  • Java Consumer:
    Properties props = new Properties();
    props.put("bootstrap.servers", "localhost:9092");
    props.put("group.id", "test-group");
    props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
    props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");Consumer<String, String> consumer = new KafkaConsumer<>(props);
    consumer.subscribe(Arrays.asList("test"));while (true) {ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));for (ConsumerRecord<String, String> record : records) {System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());}
    }
    
9. 生态系统
  • Kafka Connect: 用于与其他系统集成,实现数据导入导出。
  • Kafka Streams: 用于构建流处理应用。
  • KSQL: 用于流数据的 SQL 查询。
10. 参考资料
  • Apache Kafka 官方文档
  • 《Kafka 权威指南》

通过这些内容,你可以全面了解 Kafka 的基本概念、架构、使用方法及其生态系统。


http://www.ppmy.cn/news/1571515.html

相关文章

开源的 DeepSeek-R1「GitHub 热点速览」

春节假期回来&#xff0c;一睁眼全是王炸级的开源模型 DeepSeek-R1&#xff01; GitHub 地址→github.com/deepseek-ai/DeepSeek-R1 DeepSeek-R1 开源还不到一个月&#xff0c;Star 数就飙升至冲破天际的 70k。虽然目前仅开源了模型权重&#xff0c;但同时发布的技术论文详细地…

Word 编辑密码解密教程

如果你遇到 word 不能打开编辑或忘记密码的情况&#xff0c;别担心&#xff0c;这里有最简单的办法。具体步骤如下&#xff1a;在手机或电脑浏览器上输入 文件密码.top 进入密码找回网站&#xff0c;然后点击“立即开始”&#xff0c;上传文件&#xff0c;无需下载软件&#xf…

计算机视觉-拟合

一、拟合 拟合的作用主要是给物体有一个更好的描述 根据任务选择对应的方法&#xff08;最小二乘&#xff0c;全最小二乘&#xff0c;鲁棒最小二乘&#xff0c;RANSAC&#xff09; 边缘提取只能告诉边&#xff0c;但是给不出来数学描述&#xff08;应该告诉这个点线是谁的&a…

计算机毕业设计——Springboot餐厅点餐系统

&#x1f389;**欢迎来到琛哥的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 琛哥&#xff0c;一名来自世界500强的资深程序猿&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 琛哥在深度学习任务中展现出卓越的能力&a…

Python中是否有类似R语言中rds的功能,可将对象保存为文件?

在数据分析和科学计算领域&#xff0c;R语言和Python都是极为流行的编程语言。它们各自拥有独特的优势和丰富的库资源&#xff0c;使得数据科学家们能够高效地处理和分析数据。在R语言中&#xff0c;RDS&#xff08;R Data Serialization&#xff09;格式是一种非常方便的方式&…

Kafka因文件句柄数过多导致挂掉的排查与解决

一、问题现象 在k8s集群中部署了多个服务&#xff0c;包括Kafka、TDengine集群和Java等。这些服务使用NFS作为持久化存储方案。最近遇到了一个问题&#xff1a;Kafka频繁报错并最终挂掉。错误日志如下&#xff1a; 2025-02-09T09:39:07,022] INF0 [LogLoader partition__cons…

C++ ——从C到C++

1、C的学习方法 &#xff08;1&#xff09;C知识点概念内容比较多&#xff0c;需要反复复习 &#xff08;2&#xff09;偏理论&#xff0c;有的内容不理解&#xff0c;可以先背下来&#xff0c;后续可能会理解更深 &#xff08;3&#xff09;学好编程要多练习&#xff0c;简…

Rust 命令行参数解析:以 minigrep 为例

一、新建项目 和往常一样&#xff0c;我们先用 cargo new minigrep 创建一个新的二进制项目&#xff1a; $ cargo new minigrep $ cd minigrepCargo 自动帮我们生成了一个基础的 src/main.rs 文件&#xff0c;里面有一个简单的 “Hello, world!” 示例。我们会在此文件中编写…