Ubuntu18.04部署kafka并用python简单连接实现生产与消费

一、MQ简单介绍

我们在做项目的时候经常会使用消息队列(MQ)实现不同的系统或子应用等之间的数据的传递,接下来简单的介绍几款流行的MQ应用,想知道详细且具体的MQ知识可以自行度娘或Google。这篇文章就讲的很不错https://www.cnblogs.com/stone531/p/10519279.html
1.ZeroMQ
号称最快的消息队列系统,尤其针对大吞吐量的需求场景。扩展性好,开发比较灵活,采用C语言实现,实际上只是一个socket库的重新封装,如果做为消息队列使用,需要开发大量的代码。ZeroMQ仅提供非持久性的队列,也就是说如果down机,数据将会丢失。其中,Twitter的Storm中使用ZeroMQ作为数据流的传输。
2.RabbitMQ
结合erlang语言本身的并发优势,支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。性能较好,但是不利于做二次开发和维护。
3.ActiveMQ
历史悠久的开源项目,是Apache下的一个子项目。已经在很多产品中得到应用,实现了JMS1.1规范,可以和spring-jms轻松融合,实现了多种协议,不够轻巧(源代码比RocketMQ多),支持持久化到数据库,对队列数较多的情况支持不好。
4.Redis
做为一个基于内存的K-V数据库,其提供了消息订阅的服务,可以当作MQ来使用,目前应用案例较少,且不方便扩展。入队时,当数据比较小时Redis的性能要高于RabbitMQ,而如 果数据大小超过了10K,Redis则慢的无法忍受;出队时,无论数据大小,Redis都表现出非常好的性能,而RabbitMQ的出队性能则远低于 Redis。
5.Kafka/Jafka
Kafka是Apache下的一个子项目,是一个高性能跨语言分布式发布/订阅消息队列系统,而Jafka是在Kafka之上孵化而来的,即Kafka的一个升级版。
具有以下特性:
①:快速持久化,可以在O(1)的系统开销下进行消息持久化;
②:高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;完全的分布式系统,Broker、Producer、Consumer都原生自③:动支持分布式,自动实现负载均衡;
④:支持Hadoop数据并行加载,对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。
⑤:Kafka通过Hadoop的并行加载机制统一了在线和离线的消息处理。Apache Kafka相对于ActiveMQ是一个非常轻量级的消息系统,除了性能非常好之外,还是一个工作良好的分布式系统。

二、安装java环境

今天我就来详细介绍一下单点在虚拟机中部署一个kafka消息队列,并用python简单的实现消息的生产与消费。
1.先在虚拟机安装java环境,下载链接 (http://www.oracle.com/technetwork/java/javase/downloads/index.html),可以根据自己的系统进行下载。
2、进行解压

sudo tar -zxvf jdk-8u171-linux-x64.tar.gz 

则解压到了当前目录下,解压后可以把解压文件移动到自己想要放的目录下,使用mv命令

 sudo mv jdk1.8.0_171 /usr/lib/xxx

3、进行配置
使用全局设置方法,它是所有用户的共用的环境变量
命令如下:

$sudo vim ~/.bashrc

然后把如下命令复制到最底部

export JAVA_HOME=/usr/local/java/jdk1.8.0_25  
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
export PATH=${JAVA_HOME}/bin:$PATH
export JAVA_HOME=后面要填写自己解压后的jdk的路径

4、生效~/.bashrc文件
命令如下:

$sudo source ~/.bashrc

5、测试是否安装成功

java -version 

查看版本号是否改变

三、安装zookeeper

1.下载zookeeper.
链接 https://zookeeper.apache.org/releases.html#download
2.下载解压后,进入解压目录,从 conf 目录下拷贝 zoo_sample.cfg 到该目录下并重命名为 zoo.cfg。
3.配置 zoo.cfg ,指定数据目录和日志目录

配置日志输出目录

4.启动zookeeper,进入bin目录下使用命令./zkServer.sh start

./zkServer.sh start

如果shell终端出现以下打应,说明启动成功。

ZooKeeper JMX enabled by default
Using config: /home/wangping/桌面/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

5.查看zookeeper状态。进入bin目录下使用命令./zkServer.sh status

./zkServer.sh status

如果shell终端出现以下打应,说明zookeeper单点模式启动成功。

ZooKeeper JMX enabled by default
Using config: /home/wangping/桌面/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: standalone

6.集群配置,需要在zoo.cfg配置文件中添加如下配置。并在zoo.cfg中配置的日志文件目录中同级创建myid文件,第一台机器里面写1,以此类推。

集群配置

四、安装kafka

1.先下载kafka,下载链接(http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.4.0/kafka_2.13-2.4.0.tgz),解压。
2.在config文件夹下配置server.properties。默认配置 advertised.listeners=PLAINTEXT://:your.host.name:9092 修改为 advertised.listeners=PLAINTEXT://:127.0.0.1:9092
3.启动kafka。

bin/kafka-server-start.sh config/server.properties

4.创建topic

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

其中test为创建的topic名称。


创建topic

如上图,创建了一个名为 test 的主题,其中包含一个分区和一个副本因子。 创建成功之后会输出: Created topic "test".创建主题后,系统会在config / server.properties文件中的"/ tmp / kafka-logs /"中指定的创建主题的日志。
5.其他kafka基本命令。

bin/kafka-topics.sh --list --zookeeper localhost:2181  查询topic列表
bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic test  查看topic信息
bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic demo  删除topic
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test  启动生产者
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning  启动消费者

五、python通过kafka简单实现生产者与消费者。

1.创建生产者

from kafka import KafkaProducer
kafka_host = '127.0.0.1'  # kafka服务器地址
kafka_port = 9092  # kafka服务器的端口
producer = KafkaProducer(bootstrap_servers=['{kafka_host}:{kafka_port}'.format(
    kafka_host = kafka_host,
    kafka_port = kafka_port
)])
#调用send方法,发送的消息为hi
producer.send('test', key="hello".encode('utf-8'), value= "hi".encode('utf-8'))
#发送信息需要编码加上encode('utf-8'),否则会报错AssertionError: xxx must be bytes
producer.flush()

2.创建消费者

from kafka import KafkaConsumer

kafka_host = '127.0.0.1'  # kafka服务器地址
kafka_port = 9092  # kafka服务器的端口
#消费topic=>test里的消息,并指定group_id(自定义),多个机器或进程想顺序消费,可以指定同一个group_id,
# 如果想一条消费多次消费,可以换一个group_id,会从头开始消费
consumer = KafkaConsumer(
    'test',
    group_id = 'my-group',
    bootstrap_servers = ['{kafka_host}:{kafka_port}'.format(kafka_host=kafka_host, kafka_port=kafka_port)]
)
for message in consumer:
    print("message is=>%s"%message.value)

简单的利用python实现对消息队列的使用就完成了。祝大家新年快乐。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容