centos7 安装 kafka

148 篇文章 2 订阅
1 篇文章 0 订阅

环境 centos7 ,python 2.7 , kafka 2.3.0,kafka-python 2.0.2

kafka-python 2.0.2 不支持 kafka 2.5.0 及以上版本,可以查看 pypi 官网信息
本文未做 kafka 高可用以及认证授权,只适合测试使用
kafka 原理可以参考文章 https://gitbook.cn/books/5ae1e77197c22f130e67ec4e/index.html

1、官网下载 kafka 安装包

2、启动 kafka 程序

[root@ansible002 ~]# tar -zxvf kafka_2.11-2.3.0.tgz
[root@ansible002 ~]# cd kafka_2.11-2.3.0

shell1 运行 zookeeper

[root@ansible002 kafka_2.11-2.3.0]# bin/zookeeper-server-start.sh config/zookeeper.properties

shell2 运行 kafka

[root@ansible002 kafka_2.11-2.3.0]# bin/kafka-server-start.sh config/server.properties

shell3 create topic 存储 events

[root@ansible002 kafka_2.11-2.3.0]# bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

查看 topic

[root@ansible002 kafka_2.11-2.3.0]# bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092
Topic:quickstart-events	PartitionCount:1	ReplicationFactor:1	Configs:segment.bytes=1073741824
	Topic: quickstart-events	Partition: 0	Leader: 0	Replicas: 0	Isr: 0

写 events 到 topic, ctrl + c 结束

[root@ansible002 kafka_2.11-2.3.0]# bin/kafka-console-producer.sh --topic  quickstart-events --broker-list localhost:9092
>Are you ok?
>I'm fine        
>Fuck you

读取 events, ctrl + c 结束

[root@ansible002 kafka_2.11-2.3.0]# bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
Are you ok?
I'm fine
Fuck you

停止 kafka,停止 bin/kafka-console-producer.sh 、bin/kafka-console-consumer.sh、bin/kafka-server-start.sh、bin/zookeeper-server-start.sh

如果需要清除 kafka 数据

rm -rf /tmp/kafka-logs /tmp/zookeeper

3、python 连接 kafka。使用 kafka 包不成功,使用 kafka-python 成功

[root@ansible002 kafka_2.12-2.5.0]# pip install kafka-python

生产者脚本

[root@ansible002 python-kafka]# cat send.py 
servers = ['127.0.0.1:9092']
from kafka import KafkaProducer
def producer_message():
    producer = KafkaProducer(bootstrap_servers=servers)
    for i in range(100):
        msg = "some_message_bytes " + str(i)
        producer.send('kafka-topic', bytes(msg.encode("utf-8")))
        print(msg)

if __name__ == '__main__':
    producer_message()
python send.py

消费者脚本

[root@ansible002 python-kafka]# cat recieve.py 
# -*- coding: utf-8 -*-
from kafka import KafkaConsumer
from kafka import TopicPartition

servers = ['127.0.0.1:9092']
# 消费方式1,默认消费所有分区的消息
def consumer_message1():
    consumer = KafkaConsumer('kafka-topic', 
                             bootstrap_servers=servers, 
                             group_id="kafka-group-id")
    # consumer = KafkaConsumer('kafka-topic', bootstrap_servers=servers)
    for msg in consumer:
        print(msg)

# 消费方式2, 指定消费分区
def consumer_message2():
    consumer = KafkaConsumer(bootstrap_servers=servers, 
                             group_id="kafka-group-id")
    consumer.assign([TopicPartition('kafka-topic', 0)])
    for msg in consumer:
        print(msg)

# 消费方式3,手动commit,生产中建议使用这种方式
def consumer_message3():
    consumer = KafkaConsumer(bootstrap_servers=servers,
                             consumer_timeout_ms=1000,
                             group_id="kafka-group-id",
                             enable_auto_commit=False)
    consumer.assign([TopicPartition('kafka-topic', 0)])
    for msg in consumer:
        print(msg)
        consumer.commit()

if __name__ == '__main__':
    print("消费方式1,默认消费所有分区的消息")
    consumer_message1()
    #print("消费方式2, 指定消费分区")
    #consumer_message2()
    #print("消费方式3,手动commit,生产中建议使用这种方式")
    #consumer_message3()
python recieve.py

http://kafka.apache.org/quickstart

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值