Hadoop11-Kafka

本文深入解析了Kafka消息队列的核心概念,包括Broker、Topic、Partition、Producer和Consumer等,阐述了Kafka的架构,并提供了Python API实践示例,帮助读者理解如何使用Kafka进行消息生产和消费。
部署运行你感兴趣的模型镜像

1. 核心概念简介

Broker:Kafka 集群包含一个或多个服务器,这种服务器被称为 broker。

Topic:每条发布到 Kafka 集群的消息都有一个类别,这个类别被称为 Topic。(物理上不同 Topic 的消息分开存储,逻辑上一个 Topic 的消息虽然保存于一个或多个 broker 上,但用户只需指定消息的 Topic 即可生产或消费数据而不必关心数据存于何处)。

Partition:Partition 是物理上的概念,每个 Topic 包含一个或多个 Partition。

Producer:负责发布消息到 Kafka broker。

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

Consumer Group:每个 Consumer 属于一个特定的 Consumer Group(可为每个 Consumer 指定 group name,若不指定 group name 则属于默认的 group)。

用户编程的时候只需要关注Topic,而不需要关注里面的存储细节。

2. 架构

âkafkaâçå¾çæç´¢ç»æ

3. API实践

Producer

# coding: utf-8
import csv
import time
from kafka import KafkaProducer
 
# 实例化一个KafkaProducer示例,用于向Kafka投递消息
producer = KafkaProducer(bootstrap_servers='localhost:9092')
# 打开数据文件
csvfile = open("../data/user_log.csv","r")
# 生成一个可用于读取csv文件的reader
reader = csv.reader(csvfile)
 
for line in reader:
    gender = line[9] # 性别在每行日志代码的第9个元素
    if gender == 'gender':
        continue # 去除第一行表头
    time.sleep(0.1) # 每隔0.1秒发送一行数据
    # 发送数据,topic为'sex'
    producer.send('sex',line[9].encode('utf8'))

Consumer

from kafka import KafkaConsumer
 
consumer = KafkaConsumer('sex')
for msg in consumer:
    print((msg.value).decode('utf8'))

 

问题

1. Topic的分区怎么理解?

有了分区后,假设一个topic可能分为10个分区,kafka内部会根据一定的算法把10分区尽可能均匀分布到不同的服务器上,比如:A服务器负责topic的分区1,B服务器负责topic的分区2,在此情况下,Producer发消息时若没指定发送到哪个分区的时候,kafka就会根据一定算法上个消息可能分区1,下个消息可能在分区2。当然高级API也能自己实现其分发算法。
(链接:https://www.zhihu.com/question/28925721/answer/43648910)

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

KafkaHadoop 集群(hadoop102、hadoop103、hadoop104)中无法启动时,可以从以下几个方面进行排查和解决: ### 检查脚本执行情况 确认使用的启动脚本是否正确。使用的启动脚本为 `kf.sh start`,脚本内容如下: ```bash #!/bin/bash case $1 in "start"){ for i in hadoop102 hadoop103 hadoop104 do echo " --------启动 $i Kafka-------" ssh $i "/opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties" done };; "stop"){ for i in hadoop102 hadoop103 hadoop104 do echo " --------停止 $i Kafka-------" ssh $i "/opt/module/kafka/bin/kafka-server-stop.sh " done };; esac ``` 要保证脚本具有可执行权限,可使用 `chmod +x kf.sh` 赋予执行权限。 ### 检查 SSH 连接 脚本中通过 SSH 连接到各个节点启动 Kafka,需确保能正常 SSH 连接到 hadoop102、hadoop103 和 hadoop104 节点。可以手动执行 `ssh hadoop102` 等命令进行测试,若无法连接,要解决 SSH 连接问题,比如检查 SSH 服务是否正常运行、密钥配置是否正确等。 ### 检查配置文件 确认 `/opt/module/kafka/config/server.properties` 配置文件是否正确。重点检查以下配置项: - `broker.id`:每个节点的 `broker.id` 必须唯一。 - `listeners` 和 `advertised.listeners`:要确保配置正确,能被其他节点访问。 - `zookeeper.connect`:要保证能正确连接到 ZooKeeper 集群。 ### 检查依赖服务 Kafka 依赖 ZooKeeper 服务,要确保 ZooKeeper 服务正常运行。可以使用以下命令查看当前服务器中的所有 topic 来测试与 ZooKeeper 的连接: ```bash [ly@hadoop102 kafka]$ bin/kafka-topics.sh --zookeeper hadoop102:2181/kafka --list ``` 若该命令执行失败,可能是 ZooKeeper 服务有问题,需检查 ZooKeeper 的配置和运行状态。 ### 查看日志文件 查看 Kafka 日志文件,定位具体的错误信息。日志文件通常位于 `/opt/module/kafka/logs` 目录下,查看 `server.log` 文件,从中找出启动失败的原因,根据错误信息进行相应的处理。 ### 检查资源使用情况 确保每个节点有足够的资源(如内存、CPU 等)来运行 Kafka。可以使用 `top`、`free -m` 等命令查看系统资源使用情况,若资源不足,可考虑增加资源或者调整 Kafka 配置。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值