使用Docker安装Kafka

安装zookeeper

在本地创建一个文件夹path/zookeeper用于容器的路径映射(因人而异,记得替换)

docker run -d -p 2181:2181 -v path/zookeeper:/data -v /etc/localtime:/etc/localtime --name zookeeper --restart always zookeeper

安装kafka

wurstmeister/kafka是比较常见的 kafka 镜像,这里以wurstmeister/kafka:2.12-2.5.0版本为例,介绍如何安装 kafka

docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name kafka -p 9002:9002 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT={your_ip_address}:2181/kafka \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://{your_ip_address}:9002 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9002 \
-v /etc/localtime:/etc/localtime \
wurstmeister/kafka:2.12-2.5.0

各参数含义如下:

# -e KAFKA_BROKER_ID=0  在kafka集群中,每个kafka都有一个BROKER_ID来区分自己
# -e KAFKA_ZOOKEEPER_CONNECT={your_ip_address}:2181/kafka 配置zookeeper管理kafka的路径
# -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://{your_ip_address}:9002  把kafka的地址端口注册给zookeeper
# -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9002 配置kafka的监听端口
# -v /etc/localtime:/etc/localtime 容器时间同步虚拟机的时间

测试

进入 kafka 容器,并进入到bin目录下

docker exec -it {container_id} /bin/bash && cd /opt/kafka_2.12-2.5.0/bin

创建一个新主题(test-kafka)来存储事件

./kafka-topics.sh --create --topic test-kafka --bootstrap-server localhost:9002

查看创建的新主题(test-kafka)

./kafka-topics.sh --describe --topic test-kafka --bootstrap-server localhost:9002

测试消费信息

./kafka-console-consumer.sh --topic test-kafka --from-beginning --bootstrap-server localhost:9002

测试生产信息:运行kafka-console-producer.sh并输入一段文字,检查消费者的终端是否显示了相应的内容

./kafka-console-producer.sh --topic test-kafka --bootstrap-server localhost:9002

Kafka 中的生产者和消费者是消息传递系统的两个核心组件:

生产者 (Producer)

生产者是负责将消息发布到 Kafka 主题的客户端。生产者将消息发送到 Kafka 服务器,服务器再将消息存储在对应的主题分区中。生产者可以通过指定消息的键来决定消息被存储到哪个分区(如果未指定,则使用轮询或其他分区策略)。

主要特点:
  • 高吞吐量:Kafka 生产者设计用于处理大量数据,可以实现高吞吐量的消息传输。
  • 可靠性:生产者支持不同的可靠性级别,可以根据需要配置消息的确认机制(例如,等待 leader 的确认、所有副本的确认等)。
  • 负载均衡:生产者可以自动将消息负载均衡地分配到主题的不同分区中。
  • 批处理:为了提高效率,生产者可以批量发送消息。

消费者 (Consumer)

消费者是负责从 Kafka 主题中读取消息的客户端。消费者订阅一个或多个主题,并从中读取数据。消费者可以是独立的,也可以是消费者组的一部分。在消费者组中,每个消费者负责读取分区的一部分数据,以实现高效的数据处理。

主要特点:
  • 消费组:消费者可以组成消费组,组内的消费者共同消费一个主题的消息,每个消费者负责消费一部分分区的数据,这样可以实现消息的并行处理。
  • 自动偏移管理:消费者可以自动跟踪已经消费的消息的偏移量,以便在失败或重新启动时从上次消费的位置继续消费。
  • 消息回溯:消费者可以重新设置偏移量,以便从旧的消息开始消费,实现消息的回溯处理。
  • 负载均衡:在消费者组中,如果消费者的数量发生变化(例如,新的消费者加入或现有消费者离开),Kafka 会自动重新分配分区以平衡负载。

Kafka-python

接下来介绍如何使用 python 的 kafka 库实现:生产者读取本地文档中的内容并以流的形式发送到 kafka 主题,消费者从 kafka 主题接收数据流并输出。(注:代码中的 ip 地址注意替换

库安装

pip3 install kafka-python

生产者

from kafka import KafkaProducer
import time

# 创建Kafka生产者
producer = KafkaProducer(bootstrap_servers='{your_ip_address}:9002')

# 读取本地数据文件
with open('doc.txt', 'r') as file:
    for line in file:
        # 发送数据到Kafka主题
        producer.send('test-kafka', line.encode('utf-8'))
        # 设置发送间隔
        time.sleep(1)

消费者

from kafka import KafkaConsumer

# 创建Kafka消费者
consumer = KafkaConsumer('test-kafka', bootstrap_servers='{your_ip_address}:9002')

# 消费数据
for message in consumer:
    print(f"Received message: {message.value.decode('utf-8')}")
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值