kafka,redis,zookeeper,cx_Oracle在python中的应用

2017-07-03

版权声明:本文为作者原创文章,可以随意转载,但必须在明确位置表明出处!!!

Tips:最近公司有个需求,需要用到kafka,oracle数据库,后来设计了一下程序,把redis,zookeeper也加上去了,这里记录一下它们在python中的使用。

什么是kafka?

根据官方文档描述,kafka是一个流分发平台,具体是什么意思呢?我们认为流平台具有三个关键功能

  • 它可以让你发布和订阅记录流,在这个方面它类是与消息队列
  • 它允许你以容错的方式存储记录
  • 它可以让你处理流记录

kafka常被用于两大应用

  1. 在系统或应用之间建立可靠获取数据的实时流数据管道
  2. 建立对数据流进行变换或反应的实时流应用程序

kafka的一些基本概念

  • kafka作为一个集群运行在一个或多个服务器上
  • kafka集群的记录流被存储在被称作为topic(主题)的类别里
  • 每条记录由一个key,value,和一个时间戳构成

kafka四个核心API

  • 生产者API(Producer API)允许应用程序发布一个流记录到一个或多个kafka topics(kafka 主题)
  • 消费者API(Consumer API)允许用用程序订阅一个或多个topics(主题)并处理为其生产的记录
  • 流API(Streams API)允许应用程序作为一个流处理器,从一个或多个topics(主题)消费输入流,并将输出流生产到一个和多个topics(主题),有效的将输入流转换为输出流
  • 连接器API(Connector API)允许建立和运行将kafka topics(主题)与现有应用程序或数据库系统相连接的可重用的生产者或消费者。例如,关系数据库的连接器可能会捕获表的每个更改。

    关于kafka更多的信息可以到官网http://kafka.apache.org/intro.html了解,本文主要记录在python怎么使用kafka。

ubuntu下kafka安装

  1. 到官网地址下载最新版本的安装包,下载地址http://kafka.apache.org/downloads,下载完后解压缩包到你需要的目录,cd到你解压后的目录
  2. 开始一个kafka服务,执行命令

    1
    2
    bin/zookeeper-server-start.sh config/zookeeper.properties
    bin/kafka-server-start.sh config/server.properties
  3. 创建一个topic(主题),执行命令

    1
    bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
  4. 发送一些消息到test主题,执行命令

    1
    2
    bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
    然后在终端输入你需要发送的消息
  5. 消费消息,执行命令

    1
    2
    bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
    这里输出的结果如果是你发送的消息则表示你的kafka服务没有问题。

kafka python库文件安装

下载安装python kafka库文件,到https://pypi.python.org/pypi官网下载所需的安装包,我这里下载的是kafak 1.3.3,下载后解压缩到目标目录,cd到目录执行以下命令

1
2
3
tar zxvf kafka-1.3.3.tar.gz
cd kafka-1.3.3
python setup.py install build

如果没有什么错误信息就证明你安装正确

使用python向kafka发送消息

1
2
3
4
from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers='localhost:9092')
for i in range(100):
producer.send('test', b'test %d' % i)

测试结果如下图所示:

什么是redis?

redis是一种key,value类型的内存数据库,和传统的数据库相比它对于数据的存储和获取速度更快。

redis安装

  1. 在官网下载最新稳定版,https://redis.io/download
  2. 解压安装包并cd到目标目录

    1
    2
    3
    tar xzf redis-3.2.9.tar.gz
    cd redis-3.2.9
    make
  3. 启动redis服务

    1
    2
    cd src
    ./redis-server
  4. 进入交互式客户端

安装redis python库文件

下载安装python kafka库文件,到https://pypi.python.org/pypi官网下载所需的安装包,我这里下载的是kafak 1.3.3,下载后解压缩到目标目录,cd到目录执行以下命令

1
2
3
tar zxvf redis-2.10.5.tar.gz
cd redis-2.10.5
python setup.py install build

使用python向redis写入一个key,value结构


再到redis交互式客户端查看是否foo变成bar了

什么是zookeeper?

ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务。由于ZooKeeper的开源特性,后来我们的开发者在分布式锁的基础上,摸索了出了其他的使用方法:配置维护、组服务、分布式消息队列、分布式通知/协调等。
Tips:ZooKeeper性能上的特点决定了它能够用在大型的、分布式的系统当中。从可靠性方面来说,它并不会因为一个节点的错误而崩溃。除此之外,它严格的序列访问控制意味着复杂的控制原语可以应用在客户端上。ZooKeeper在一致性、可用性、容错性的保证

zookeeper安装

  1. 在官网下载zookeeper安装包,https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
  2. 解压安装包到指定目录

    1
    2
    3
    4
    5
    6
    tar zxvf zookeeper-3.4.5.tar.gz
    cd zookeeper-3.4.5/src/c
    ./configure
    make
    cd zookeeper-3.4.5/conf
    cp zoo_sample.cfg zoo.cfg
  3. 启动zookeeper服务

    1
    2
    cd zookeeper-3.4.5/bin
    ./zkServer.sh start

zookeeper python中使用

下载安装zkpython库文件,到https://pypi.python.org/pypi官网下载所需的安装包,我这里下载的是zkpython 0.4.2,下载后解压缩到目标目录,cd到目录执行以下命令

1
2
3
tar zxvf zkpython-0.4.2.tar.gz
cd zkpython-0.4.2
python setup.py install build

使用python 获取zookeeper指定节点

1
2
3
4
5
6
7
8
9
10
11
12
13
import zookeeper
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "build/bdist.linux-x86_64/egg/zookeeper.py", line 7, in <module>
File "build/bdist.linux-x86_64/egg/zookeeper.py", line 6, in __bootstrap__
ImportError: libzookeeper_mt.so.2: cannot open shared object file: No such file or directory
如果出现这个错误表示缺少libzookeeper_mt.so.2依赖,这个依赖文件是上面编译zookeeper生成的,如果你的没有证明你哪里操作错了。既然有这个库文件还找不到依赖,只有一个原因路径不对,或者说环境变量不对,解决办法就是将库文件的路径导出来,这个库文件默认安装在/usr/local/lib目录下,所以我们只需导出这个路径就是了。
cd ~
vi .bashrc
在末尾PATH后面后面增加
export PATH=$PATH:/usr/local/lib
保存退出
source .bashrc


关于zookeeper更多的信息可以到官网了解

python 使用cx_Oracle

在python中是用cx_Oracle模块需要先安装oracle客户端,在官网http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html下载你需要的客户端版本,我这里使用的是instantclient-basic-linux.x64-12.2.0.1.0.zip,将压缩文件解压到目录目录,我这里是解压到/usr/lib目录下,解压完后配置环境变量。如下

1
2
3
4
cd ~
vi .bashrc
export ORACLE_HOME=/usr/lib/instantclient_12_2
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME:/usr/local/lib

安装python cx_Oracle模块

下载安装cx_Oracle库文件,到https://pypi.python.org/pypi官网下载所需的安装包,我这里下载的是cx_Oracle-6.0b2.tar,下载后解压缩到目标目录,cd到目录执行以下命令

1
2
3
tar zxvf cx_Oracle-6.0b2.tar.gz
cd cx_Oracle-6.0b2
python setup.py install build

python中使用cx_Oracle

1
2
3
4
import cx_Oracle
dsn = cx_Oracle.makedsn(url, port, sid).replace('SID', 'SERVICE_NAME')
conn = cx_Oracle.connect(username, password, dsn)
print conn

如果没有出什么错就证明可以连接到oracle数据库了,数据库操作这里不做详细介绍,cx_Oracle更多详细的介绍可以查看cx_Oracle文档,地址https://github.com/Gavinxyj/document/tree/master/python


推荐我的微信公众号:爱做饭的老谢


上一篇:H.264码流协议解析
下一篇:cx_Oracle订阅,SessionPool使用