KafKa认知和操作

目录

1、什么是kafka?

2、kafka的作用和使用场景?

3、kafka的基本架构,由什么组成?

4、kafka命令行操作

    4.1主题topic命令行操作

(1)查看操作主题命令参数

(2)查看当前服务器中的所有topic

(3)创建、修改、删除、查看topic

4.2生产者命令行

(1)查看操作生产者命令参数

  (2) 发送消息

 4.3消费者命令行

 (1)查看操作消费者命令参数

(2)消费消息


1、什么是kafka?

Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。

2、kafka的作用和使用场景?

作用:缓存、解耦、异步通信。

(1)缓冲:有助于控制和优化数据流经过系统的速度,解决生产消息消费消息处理速度不一致的情况。

 (2)解耦:作为中间键,把数据源和目标端分离,可以扩展和修改两边的处理过程。

(3)异步通信:允许用户把一个消息放入队列,但并不立即处理它,然后在需要的时候再去处理它们。

3、kafka的基本架构,由什么组成?

(1)Producer:消息生产者,就是向Kafka broker发消息的客户端。

(2)Consumer:消息消费者,向Kafka broker取消息的客户端。

(3)Consumer Group(CG):消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者

(4)Broker:一台Kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。

(5)Topic:可以理解为一个队列,生产者和消费者面向的都是一个topic

(6)Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列

(7)Replica:副本。一个topic的每个分区都有若干个副本,一个Leader和若干个Follower

(8)Leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是Leader。

(9)Follower:每个分区多个副本中的“从”,实时从Leader中同步数据,保持和Leader数据的同步。Leader发生故障时,某个Follower会成为新的Leader。

通过图解,大概了解了kafka,下面是kafka集群的最终架构:

4、kafka命令行操作

    4.1主题topic命令行操作

(1)查看操作主题命令参数

[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh

参数

描述

--bootstrap-server <String: server toconnect to>

连接的Kafka Broker主机名称和端口号。

--topic <String: topic>

操作的topic名称。

--create

创建主题。

--delete

删除主题。

--alter

修改主题。

--list

查看所有主题。

--describe

查看主题详细描述。

--partitions <Integer: # of partitions>

设置分区数。

--replication-factor<Integer: replication factor>

设置分区副本。

--config <String: name=value>

更新系统默认的配置。

(2)查看当前服务器中的所有topic

[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --list

(3)创建、修改、删除、查看topic

(1)创建topic
[atguigu@hadoop102 kafka]$ 


kafka-topics.sh --bootstrap-server hadoop102:9092 --create --partitions 1 --replication-factor 3 --topic first


kafka-topics.sh --bootstrap-server hadoop102:9092 --create --topic first1 --partitions 1 --replication-factor 2

选项说明:
--topic 定义topic名
--replication-factor  定义副本数
--partitions  定义分区数

(2)查看某个Topic的详情
[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --describe --topic first

(3)修改分区数(注意:分区数只能增加,不能减少)
[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --alter --topic first --partitions 3

(4)删除topic
[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --delete --topic first

4.2生产者命令行

(1)查看操作生产者命令参数

[atguigu@hadoop102 kafka]$ bin/kafka-console-producer.sh

参数

描述

--bootstrap-server <String: server toconnect to>

连接的Kafka Broker主机名称和端口号。

--topic <String: topic>

操作的topic名称。

  (2) 发送消息

[atguigu@hadoop102 kafka]$ bin/kafka-console-producer.sh --bootstrap-server hadoop102:9092 --topic first

>hello world

>atguigu  atguigu

 4.3消费者命令行

 (1)查看操作消费者命令参数

[atguigu@hadoop102 kafka]$ bin/kafka-console-consumer.sh

参数

描述

--bootstrap-server <String: server toconnect to>

连接的Kafka Broker主机名称和端口号.

--topic <String: topic>

操作的topic名称。

--from-beginning

从头开始消费。

--group <String: consumer group id>

指定消费者组名称。

(2)消费消息

(1)消费first主题中的数据。
[atguigu@hadoop102 kafka]$ bin/kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic first

(2)把主题中所有的数据都读取出来(包括历史数据)。
[atguigu@hadoop102 kafka]$ bin/kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --from-beginning --topic first

特别说明:来源尚硅谷

### Windows环境下Kafka启动失败的原因及解决方案 #### 1. 权限问题 如果 Kafka 在 Windows 下无法正常启动,可能是由于权限不足引起的。确保运行命令提示符或 PowerShell 的窗口是以管理员身份打开的。此外,在启动 Kafka Zookeeper 进程之前,请确认数据目录日志目录具有足够的读写权限[^1]。 #### 2. 配置文件中的堆内存设置不当 另一个常见的问题是 `kafka-server-start.bat` 文件中关于 JVM 堆内存参数的配置不正确。默认情况下,Kafka 使用 `-Xmx1G -Xms1G` 设置最大最小堆内存大小。然而,在某些低配机器上,这种设置可能会导致进程崩溃。可以通过编辑 `bin/windows/kafka-server-start.bat` 文件来调整这些值。例如: ```batch set KAFKA_HEAP_OPTS="-Xmx512M -Xms128M" ``` 上述代码片段将堆的最大值设为 512MB,初始值设为 128MB。请注意,修改完成后保存文件时应避免手动换行,允许系统自动处理换行逻辑[^2]。 #### 3. 数据路径冲突 有时 Kafka 可能会因为指定的数据存储路径存在问题而导致启动失败。检查 `server.properties` 中定义的日志目录是否存在以及是否有权访问它。通常,默认路径位于 `/tmp/kafka-logs/` 或类似的临时位置。对于 Windows 用户来说,建议将其更改为本地磁盘上的固定路径,比如 `C:\kafka\logs` 并赋予完全控制权限给当前用户账户。 #### 4. Topic 删除残留元数据引发的问题 当尝试重新创建已被删除的主题 (Topic) 时,如果没有彻底清理旧主题的相关元数据,则可能出现启动异常的情况。这涉及到 Kafka Broker 对 topic 生命周期管理机制的理解偏差。可以参考相关文档了解具体操作方法以清除遗留信息[^3]。 #### 5. 消费者组偏移量滞后影响生产端稳定性 尽管此现象主要发生在消费者一侧,但如果存在大量未及时提交的消息累积或者频繁发生再平衡事件也可能间接干扰到整个集群的表现状态。针对这种情况下的优化措施包括但不限于增加分区数量、提升硬件资源配置水平以及合理规划消息分发策略等方面入手加以改进[^4]。 ```python from kafka import KafkaConsumer consumer = KafkaConsumer( 'my-topic', bootstrap_servers=['localhost:9092'], auto_offset_reset='earliest', # 如果需要从头开始消费则启用此项 enable_auto_commit=False # 手动控制offset commit行为更为安全可靠 ) for message in consumer: print(f"{message.topic}:{message.partition}::{message.offset}: key={message.key}, value={message.value}") # 显式调用commit同步更新进度条至broker侧 consumer.commit() ``` 以上脚本展示了如何通过 Python 客户端库连接到 Kafka 实例并实现基本功能的同时还演示了怎样精确掌控每批次接收到的内容及其对应的位置标记点位关系从而有效规避潜在风险隐患的发生几率达到预期目标效果最佳实践案例分享之一部分而已仅供参考学习用途并非唯一标准答案形式呈现出来供大家借鉴交流共同进步成长过程中不断积累经验教训总结规律形成体系化认知结构最终达成高效解决问题能力培养目的为止谢谢大家的支持配合共同努力奋斗前行吧!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别这么骄傲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值