使用python操作kafka的过程记录

一、首先是安装安装python3.6

 在安装时,按照网上的命令,发现报错

sudo add-apt-repository ppa:jonathonf/python-3.6

报错信息:找不到add-apt-repository命令。

sudo apt-get install python-software-properties
sudo apt-get update

 

sudo apt install software-properties-common
sudo apt-get update

成功!然后继续

sudo apt-get update
sudo apt-get install python3.6

安装成功,设置python的默认为python3.6

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2

更改默认值,python默认为Python2,现在修改为Python3 

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150

如果要切换到Python2,执行:

sudo update-alternatives --config python

安装pip3*

curl https://bootstrap.pypa.io/get-pip.py | sudo python3.6

二、安装zookeeper和Kafka

https://blog.csdn.net/weixin_40596016/article/details/79562023

 按照上面的安装又开始踩坑了。。

1、安装jdk,本人安装的java10.0最新版

idve@ubuntu:/var/pywww$ java -version
java version "10.0.2" 2018-07-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)

2、安装zookeeper,

 解压到了/usr/local/kafka/下

idve@ubuntu:/var/pywww$ ls -ll /usr/local/kafka/
drwxr-xr-x  6 idve root 4096 7月  24 22:20 kafka_2.12-2.0.0
drwxr-xr-x 10 idve root 4096 3月  27 12:36 zookeeper-3.4.12

然后导入环境变量

2. 配置环境变量

export zookeeper_home=/usr/local/kafka/zookeeper-3.3.6

3. 使配置生效

source /etc/profile

4. 成功标识

[root@enginekafka_2.10-0.9.0.1]# sh $zookeeper_home/bin/zkServer.sh start

JMX enabled by default

Using config: /usr/local/kafka/zookeeper-3.3.6/bin/../conf/zoo.cfg

grep: /usr/local/kafka/zookeeper-3.3.6/bin/../conf/zoo.cfg: No such file or directory

Starting zookeeper ... STARTED

但是~~~但是~~~我没有成功标识,报错了如下第一次是

Syntax error: "(" unexpected (expecting "fi")

百度得到的答案是Ubuntu的默认shell有问题,把dash改成bash,所以我又改成bash试试

root@127.0.0.1:~# cd /bin/
root@127.0.0.1:/bin# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Dec 23 22:30 /bin/sh -> dash(默认)
root@127.0.0.1:/bin# ln -sf bash /bin/sh
root@127.0.0.1:/bin# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Dec 23 22:37 /bin/sh -> bash

这样修改后成功了启动了。

接下来安装kafka,没什么说的,解压就可以了,需要注意的是配置文件的说明:

https://blog.csdn.net/m0_37739193/article/details/78115417

然而~~~坑没有填完,运行zookeeper时没有问题,但是在运行kafka的时候,也就是

执行:sudo bin/kafka-server-start.sh config/server.properties

时候又报错了:

/usr/local/kafka/kafka_2.12-2.0.0/bin/kafka-run-class.sh: 第 306 行: exec: java: 未找到

这个问题排查耗费了我3个小时,对,没错就是3个小时,一看就知道是java环境问题,但是网上的回答都不完整。

在配置java环境的时候,java从java6开始就没有java/path/to/lib/tool.jar 和dt.dat这两个文件了。

同时,在配置java环境的时候不能只修改/etc/profile 文件,本人就是一直按照网上的修改这个文件报错的。

真正的做法是修改/etc/environment 和 /etc/profile,这两个文件都要修改才行。

三、大招---生产和消费者代码

直接贴吧:

producer:

#!/var/bin/env python
# -*- coding: utf-8 -*-


import json
from kafka import KafkaProducer


def produce():
    producer = KafkaProducer(bootstrap_servers='localhost:9092')
    for i in range(2):
        msg_dict = {
            "db_config": {
                "database": "test_1",
                "host": "localhost",
                "user": "root",
                "password": "password"
            },
            "table": "msg",
            "msg": "测试下的第%s条信息" % i
        }
        msg = json.dumps(msg_dict)
        re = producer.send('test', key=b'test', value=msg.encode("utf-8"))
    producer.close()
    print(re)


def to_str(bytes_or_str):
    if isinstance(bytes_or_str, str):
        value = bytes_or_str.encode('utf-8')
    else:
        value = bytes_or_str
    return value


if __name__ == '__main__':
    produce()

consumer:

#!/var/bin/env python
# -*- coding: utf-8 -*-


import json

from kafka import KafkaConsumer


def consumer():
    com = KafkaConsumer('test', bootstrap_servers=['localhost:9092'])
    for msg in com:
        value=json.loads(msg.value)
        rec = "%s:%d:%d: key=%s value=%s" % (msg.topic, msg.partition, msg.offset, msg.key, value)
        print(rec)


if __name__ == "__main__":
    consumer()

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值