【原创】从零开始搭建开发使用的Kafka环境

入门资料

  1. 百度百科:

    Kafka是一种高吞吐量的分布式发布订阅消息系统,这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消费。

  2. 归属公司

    Apache Kafka

    软件语言:scala

  3. 相关术语介绍

  • Broker: Kafka集群包含一个或多个服务器,这种服务器被称为broker[
  • Topic:每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
  • Partition:Partition是物理上的概念,每个Topic包含一个或多个Partition.
  • Producer:赋值发布消息到负责发布消息到Kafka broker(生产者)
  • Consumer:消息消费者,向Kafka broker读取消息的客户端。
  • Consumer Group:每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。

目标以及流程:

  1. 单机搭建kafka
  2. 集群搭建kafka(下一步)
  3. 搭建kafka控制台(下一步)

kafka控制台选型:

  1. Kafka Web Console
  2. Kafka Manager
  3. KafkaOffsetMonitor

    比较:

    若只需要监控功能,推荐使用KafkaOffsetMonito,若偏重Kafka集群管理,推荐使用Kafka Manager。

    因为都是开源程序,稳定性欠缺。故需先了解清楚目前已存在哪些Bug,多测试一下,避免出现类似于Kafka Web Console的问题。

开始单机搭建kafka:

  1. 官网:http://kafka.apache.org/intro
  2. 学习官方网站的快速启动教程:http://kafka.apache.org/quickstart
  3. 官网的教程比较有服务器上的测试

开始前的备注

# 查看防火墙状态
systemctl status firewalld
# 关闭防火墙
service firewalld stop
# 启动防火墙
service firewalld start

首先要确认你已经安装了java环境

# 检查java的命令
java -version

1:下载kafka并解压

# 获取kafka最新安装包,这边使用的是镜像地址,可以去官方网站获得最新地址
wget http://mirrors.hust.edu.cn/apache/kafka/0.11.0.1/kafka_2.11-0.11.0.1.tgz
# 解压程序
tar -xzf kafka_2.11-0.11.0.1.tgz
# 进入目录
cd kafka_2.11-0.11.0.1

配置对应的配置文件,server.properties

# 配置服务器zk地址
zookeeper.connect=localhost:2181
# 配置内网绑定关系
listeners=PLAINTEXT://<your.ip>:9092
# 配置外网绑定关系
advertised.listeners=PLAINTEXT://your.host.name:9092
# 配置kafka使用内存kafka-server-start.sh
# 在start中加入jvm的启动参数,默认是1G
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"

2:启动服务器

kafka需要使用zookeeper,所以你首先需要启动一个zookeeper的服务,如果你没有的话,就使用kafka内置的脚本来启动一个单节点的zookeeper的实例

加入& 使进程常驻在内存中

默认端口:9092

默认为localhost,如果不配置对应的服务器ip的话

#执行快速启动zookeeper,通过内置的zookeeper进行启动,如果要zookeeper服务器的话吗,需要再server.properties的配置文件里面加入zookeeper.connect = 你的服务器内网ip:2181
bin/zookeeper-server-start.sh config/zookeeper.properties & [2013-04-22 15:01:37,495] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
...

然后启动kafka的服务器:通过配置文件启动kafka

# 启动kafka
# server.properties的配置文件中有一个项目: host.name需要配置成为你的内网服务器ip地址,访问的时候通过外网环境通过外网ip地址访问,内网环境通过内网地址访问
bin/kafka-server-start.sh config/server.properties &
[2013-04-22 15:01:47,028] INFO Verifying properties (kafka.utils.VerifiableProperties)
[2013-04-22 15:01:47,051] INFO Property socket.send.buffer.bytes is overridden to 1048576 (kafka.utils.VerifiableProperties)
...

3:创建一个topic名字叫做test

# 通过脚本命令创建一个主题为test的,并且使用的zookeeper的地址为localhost的
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

确认一下这个topic是否含有完毕

# 通过zookeeper的地址来访问对应的topics中的主题列表
bin/kafka-topics.sh --list --zookeeper localhost:2181
test

4:启动一个生产者发送一些消息过去

# 启动客户端推送对应的消息到服务器的kafka提供的端口
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test This is a message
This is another message

5:启动一个消费者获取对应主题的消息

# 启动客户端获取对应服务端信息的地址来消费消息,使用pull的方式,每间隔0.1s进行一次服务器获取
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning This is a message
This is another message

6:将kafka创建集群节点(暂时省略)

7:使用kafka连接进行导入导出数据(暂时省略)

8:使用kafka的流去处理数据(暂时省略)

使用场景切换:本地服务器,变成真实服务器,首先提供外部调用,应该使用的是服务器的地址

这个是在服务器本地测试场景:

切换成服务器场景的情况下,需要首先在将server.properties的配置文件中的

配置方式修正为服务器的内网ip地址,对外提供的外网ip地址会进行映射,映射到最终的内网地址中去

新版的只需要修改如下两个配置:参考文章

http://blog.csdn.net/chenxun_2010/article/details/72626618

zookeeper.connect = localhost:9092

listeners = PLAINTEXT://ip:9092

java项目进行场景测试:

服务器kafka版本:2.11- 0.11.1

客户端kafka版本:0.11.0.1

所以去maven中寻找对应的版本的jar包进行使用

org.apache.kafka
kafka-clients
0.11.0.1

查看具体的api调用:

  1. 生产者:org.apache.kafka.clients.producer.KafkaProducer.class
  2. 消费者:org.apache.kafka.clients.consumer.KafkaConsumer.class

包结构:

clients

admin

consumer:KafkaProducer(实现类)

producer:KafkaConsumer(实现类)

otherclass

common

server.policy(服务公用)

在具体实现类里面源码中有启动的示例代码再类的头部注释中

遇到了一个问题:

Failed to load class "org.slf4j.impl.StaticLoggerBinder".

kafka默认引用再java类中在程序中引入了org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar的jar包

引入对应的实现日志的框架使用logback框架

再pom的配置文件中加入对应的依赖

并且debug的日志等级很烦人,所以就加入了配置文件

参考文章:http://www.cnblogs.com/h--d/p/5668152.html

加入logback的库依赖引用

至少需要引用三个模块:

logback-classic

logback-core

logback-access

这三个模块的内容

其中参考了这篇文章觉得很详细,所以就提供出来:

http://www.cnblogs.com/warking/p/5710303.html

使用一个新的工程进行测试,一个启动消费者,一个启动生产者,编写对应的代码

  1. 编写单元测试读取配置建立连接,发送消息
  2. 生产者消费者所需要的依赖jar包
  3. 启动线程消费者拉取消息成功消费(实现消息队列的功能)

源码示例大家可以去github上拉取:

https://github.com/fly-piglet/kafkastudy

【运维技术】从零开始搭建开发使用的Kafka环境的更多相关文章

  1. 技术沙龙|京东云DevOps自动化运维技术实践

    自动化测试体系不完善.缺少自助式的持续交付平台.系统间耦合度高服务拆分难度大.成熟的DevOps工程师稀缺,缺少敏捷文化--这些都是DevOps 在落地过程中,或多或少会碰到的问题,DevOps发展任 ...

  2. 干货云集 WOT 2017全球架构与运维技术峰会揭密技术难点

    WOT,World Of Tech专注互联网IT技术领域,是一场不容错过的技术盛会!WOT 2017全球架构与运维技术峰会三大章节,15大技术专场,60+国内外一线互联网精英大咖站台,打造兼顾技术视野 ...

  3. 亲爱的,我是一条Linux运维技术学习路径呀。

    根据我的经验,人在年轻时,最头疼的一件事就是决定自己这一生要做什么.在这方面,我倒没有什么具体的建议:干什么都可以,但最好不要写小说,这是和我抢饭碗.总而言之,干什么都是好的:但要干出个样子来,这才是 ...

  4. 沙龙报名 | 京东云DevOps——自动化运维技术实践

    随着互联网技术的发展,越来越多企业开始认识DevOps重要性,在企业内部推进实施DevOps,期望获得更好的软件质量,缩短软件开发生命周期,提高服务稳定性.但在DevOps 的实施与落地的过程中,或多 ...

  5. 突破LVS瓶颈,LVS Cluster部署(OSPF + LVS) - lxcong的运维技术 - 开源中国社区

    突破LVS瓶颈,LVS Cluster部署(OSPF + LVS) - lxcong的运维技术 - 开源中国社区 突破LVS瓶颈,LVS Cluster部署(OSPF + LVS)

  6. 端口映射工具 redir/socat/xinetd - 运维技术 - 开源中国社区

    端口映射工具 redir/socat/xinetd - 运维技术 - 开源中国社区 端口映射工具 redir/socat/xinetd    10人收藏此文章, 我要收藏 发表于3天前(2013-08 ...

  7. CNUTCon2017全球运维技术大会(持续更新中) - 斯达克学院 - 实战驱动的 IT 教育平台 - Powered By EduSoho

    CNUTCon2017全球运维技术大会(持续更新中) - 斯达克学院 - 实战驱动的 IT 教育平台 - Powered By EduSoho   https://new.stuq.org/cours ...

  8. 【运维技术】redis(一主两从三哨兵模式搭建)记录

    redis(一主两从三哨兵模式搭建)记录 目的: 让看看这篇文章的的人能够知道:软件架构.软件的安装.配置.基本运维的操作.高可用测试.也包含我自己,能够节省对应的时间. 软件架构: 生产环境使用三台 ...

  9. 【运维技术】kafka三实例集群环境搭建及测试使用

    kafka三实例集群环境搭建及测试使用 单机搭建分为两部分:1. 软件安装启动 2. 软件配置 软件安装启动: # 切换到目录 cd /app # 获取kafka最新安装包,这边使用的是镜像地址,可以 ...

随机推荐

  1. Android中的渐变

    LinearGradient的用法 LinearGradient linearGradient; linearGradient = new LinearGradient(0, 0, 0, getHei ...

  2. Effective C++ —— 构造/析构/赋值运算(二)

    条款05 : 了解C++默默编写并调用哪些函数 编译器可以暗自为class创建default构造函数.copy构造函数.copy assignment操作符,以及析构函数. 1. default构造函 ...

  3. React的setState如何实现同步处理数据

    React里面的使用setState来进行状态的更新,为了性能的提升,此时的过程是异步操作的,那我们如果在一个进程里面想同步操作改变了状态的值怎么办呢,这里需要使用回调函数了: this.setSta ...

  4. C++异常 异常机制

    C++异常是丢程序运行过程中发生的异常情况(例如被0除)的一种响应.异常提供了将控制权从程序的一个部分传递到另一部分的途径.对异常的处理有3个组成部分:* 引发异常:* 使用处理程序捕获异常:* 使用 ...

  5. 【顽固BUG】Visual Studio 2015 + TestDriven.NET-3.8.2860_Personal_Beta 调用的目标发生了异常。

    前言 突然怎么弄也无法断点调试了 输出如下: ------ Test started: Assembly: Server5.V2.dll ------ 调用的目标发生了异常. 而且网站运行提示: -- ...

  6. 【PHP】数字补零的两种方法

    在php中有两个函数,能够实现数字补零, str_pad() sprintf() 函数1 : str_pad 顾名思义这个函数是针对字符串来说的这个可以对指定的字符串填补任何其它的字符串 例如:str ...

  7. RxJava && Agera 从源码简要分析基本调用流程(2)

    版权声明:本文由晋中望原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/124 来源:腾云阁 https://www.qclo ...

  8. onethink封装arclist调用文章列表!

    其实没有什么东西,做个记录,方便以后使用! <ul> <arclist mid='2' cid='2' row='2'> <li>{$title}</li&g ...

  9. 最舒适的路(并查集+枚举)(hdu1598)

    hdu1598 find the most comfortable road Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768 ...

  10. django后台导入excel文件

    1.django 如何从后台上传excel中批量解析数据 要从django后台导入的excel中批量解析数据,举一个例子,我们向后抬批量导入svn历史数据数据格式 假设excel表中有4列,每列分别是 ...