设为首页 收藏本站
查看: 1054|回复: 0

[经验分享] Kafka安装(极简版)

[复制链接]

尚未签到

发表于 2019-1-31 10:06:24 | 显示全部楼层 |阅读模式
Kafka简介
  kafka是一个高吞吐量的分布式消息队列,具有高性能、持久化、多副本备份、横向扩展能力,通常用于大数据及流处理平台。消息队列里都有生产者/消费者的概念,生产者往队列里写消息,而消费者则是从队列里获取消息。一般在架构设计中起到解耦、削峰、异步处理的作用。
  kafka对外使用topic的概念,生产者往topic里写消息,消费者则从topic里读消息。为了做到水平扩展,一个topic实际是由多个partition组成的,遇到瓶颈时,可以通过增加partition的数量来进行横向扩容。在单个parition内是保证消息有序。每新写一条消息,kafka就是在对应的文件append写,所以性能非常高。
  kafka的总体数据流是这样的:

  大概用法就是,Producers往Brokers里面的指定Topic中写消息,Consumers从Brokers里面拉去指定Topic的消息,然后进行业务处理。
  图中有两个topic,topic 0有两个partition,topic 1有一个partition,三副本备份。可以看到consumer gourp 1中的consumer 2没有分到partition处理,这是有可能出现的。
  kafka需要依赖zookeeper存储一些元信息,而kafka也自带了zookeeper。其中broker、topics、partitions的一些元信息用zookeeper来存储,监控和路由啥的也都会用到zookeeper。
  kafka名词解释:


  • producer:生产者。
  • consumer:消费者。
  • topic: 消息以topic为类别记录,Kafka将消息种子(Feed)分门别类,每一类的消息称之为一个主题(Topic)。
  • partitions:每个Topics划分为一个或者多个partition,并且partition中的每条消息都被标记了一个sequential id ,也就是offset,并且存储的数据是可配置存储时间的
  • broker:以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个broker,消费者可以订阅一个或多个主题(topic),并从Broker拉数据,从而消费这些已发布的消息。
  在kafka中每个消息(也叫作record记录,也被称为消息)通常是由一个key,一个value和时间戳构成。
  kafka有四个核心的API:


  • 应用程序使用Producer API发布消息到1个或多个topic中。
  • 应用程序使用Consumer API来订阅一个或多个topic,并处理产生的消息。
  • 应用程序使用Streams API充当一个流处理器,从1个或多个topic消费输入流,并产生一个输出流到1个或多个topic,有效地将输入流转换到输出流。
  • Connector API允许构建或运行可重复使用的生产者或消费者,将topic链接到现有的应用程序或数据系统。
  kafka就先介绍到这,网络上有很多相关的理论文章,所以这里不过多赘述了,也可以直接查看官方文档。官方文档地址如下:

  http://kafka.apache.org/intro.html


单实例安装
  本小节我们来在CentOS7上安装Kafka,由于kafka是由Scala和Java语言编写的,所以前提需要准备好java运行环境,我这里java环境是1.8的,由于jdk的安装配置都比较简单,这里就不演示jdk的安装过程了,直接安装Kafka。
  到官网上复制下载地址,使用wget命令进行下载并解压:

[root@study-01 ~]# cd /usr/local/src/
[root@study-01 /usr/local/src]# wget http://mirrors.hust.edu.cn/apache/kafka/2.0.0/kafka_2.11-2.0.0.tgz
[root@study-01 /usr/local/src]# tar -zxvf kafka_2.11-2.0.0.tgz
[root@study-01 /usr/local/src]# mv kafka_2.11-2.0.0 /usr/local/kafka
[root@study-01 /usr/local/src]# cd !$
  没有特殊要求的话,我们使用默认的kafka配置即可。若你希望kafka能够被外部机器访问,则需要配置一下你机器的外网ip地址及端口,如下:

[root@study-01 /usr/local/kafka]# vim ./config/server.properties
listeners=PLAINTEXT://192.168.190.129:9092
advertised.listeners=PLAINTEXT://192.168.190.129:9092
[root@study-01 /usr/local/kafka]#
  现在我们就可以使用kafka了,由于kafka依赖zookeeper,所以我们在启动kafka前需要先启动kafka自带的zookeeper服务:

[root@study-01 /usr/local/kafka]# nohup ./bin/zookeeper-server-start.sh ./config/zookeeper.properties > zookeeper.out &
  zookeeper服务启动成功后,启动kafka:

[root@study-01 /usr/local/kafka]# nohup ./bin/kafka-server-start.sh ./config/server.properties > kafka.out &
  两个服务都启动成功后,监听的端口如下:

[root@study-01 ~]# netstat -lntp |grep java
tcp6       0      0 :::38031                :::*                    LISTEN      3629/java
tcp6       0      0 :::33620                :::*                    LISTEN      3945/java
tcp6       0      0 :::9092                 :::*                    LISTEN      3945/java
tcp6       0      0 :::2181                 :::*                    LISTEN      3629/java
[root@study-01 ~]#
  接下来我们测试一下kafka是否正常可用,首先创建一个topic,命令如下:

[root@study-01 /usr/local/kafka]# ./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic hello
Created topic "hello".
[root@study-01 /usr/local/kafka]#
  测试是否能获取topic列表:

[root@study-01 /usr/local/kafka]# ./bin/kafka-topics.sh --list --zookeeper localhost:2181
hello
[root@study-01 /usr/local/kafka]#
  测试往一个topic上发送消息:

[root@study-01 /usr/local/kafka]# ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic hello>hello world
>hello kafka
>
  测试从一个topic上消费消息:

[root@study-01 /usr/local/kafka]# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic hello --from-beginning
hello world
hello kafka
  通过以上测试,可以看到,kafka能够正常的创建topic进行发送/接收消息,那么就代表我们安装成功了。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-669926-1-1.html 上篇帖子: Kafka(一) 下篇帖子: kafka中partition和消费者对应关系
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表