1、zookeeper搭建

  Kafka集群依赖zookeeper,需要提前搭建好zookeeper

  单机模式(7步)(集群模式进阶请移步:http://blog.51cto.com/nileader/795230)

Step1:

  1. cd /usr/local/software
  2.  
  3. jdk-8u161-linux-x64.rpm
    链接:https://pan.baidu.com/s/1i6iHIDJ 密码:bgcc
  4.  
  5. rpm -ivh jdk-8u161-linux-x64.rpm
  6.  
  7. vi /etc/profile

JAVA_HOME=/usr/java/jdk1.8.0_161
JRE_HOME=/usr/java/jdk1.8.0_161/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH

source /etc/profile

echo $PATH

Step2:

# 下载zookeeper

wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz

# 如果下载不到,可以使用迅雷,或者使用百度云盘

链接:https://pan.baidu.com/s/1MXYd4UlKWvqB6EcVLyF8cg 密码:an6t

# 解压

tar -zxvf zookeeper-3.4.11.tar.gz

# 移动一下

mv zookeeper-3.4.11 /usr/local/zookeeper-3.4.11

Step3:重命名 zoo_sample.cfg文件

  1.  mv /usr/local/zookeeper-3.4.11/conf/zoo_sample.cfg  /usr/local/zookeeper-3.4.11/conf/zoo.cfg

Step4:vi /usr/local/zookeeper-3.4.11/conf/zoo.cfg,修改

  1. dataDir=/usr/local/zookeeper-3.4.11/data

Step5:创建数据目录

mkdir  /usr/local/zookeeper-3.4.11/data

Step6:启动zookeeper:执行

  1. /usr/local/zookeeper-3.4.11/bin/zkServer.sh start

Step7:检测是否成功启动:执行

  1. /usr/local/zookeeper-3.4.11/bin/zkCli.sh
    或者
    yum install nc -y
    echo stat| nc localhost 2181

================================================================================================================

2、下载Kafka

  1. # mkdir -p /usr/local/software
    # cd /usr/local/software
    # wget http://mirror.bit.edu.cn/apache/kafka/1.0.0/kafka_2.12-1.0.0.tgz
  2.  
  3. # 百度云下载地址:
    链接:https://pan.baidu.com/s/1Kp0uD_5YjGKOLkbW_igm2g 密码:v1q7
   kafka_2.12-1.0.0.tgz    //其中2.12-1.0.0为Scala的版本,kafka-1.0.0-src.tgz为kafka版本
 
3、解压
  1. # tar zxf kafka_2.12-1.0.0.tgz -C /usr/local/
  2. # cd /usr/local/
  3. # mv kafka_2.12-1.0.0/ kafka/
4、配置
mkdir -p /usr/local/kafka/kafkaLogs
  1. # vi /usr/local/kafka/config/server.properties
  2.  
  3. # broker的ID,集群中每个broker ID不可相同
    broker.id=0
    # 监听器,端口号和port一致即可
    listeners=PLAINTEXT:/10.10.6.225/:9092
    # Broker的监听端口
    port=9092
  4.  
  5. # 必须填写当前服务器IP地址
    host.name=10.10.6.225
  6.  
  7. # 必须填写当前服务器IP地址
    advertised.host.name=10.10.6.225
    # 暂未配置集群
    zookeeper.connect=10.10.6.225:2181
  8.  
  9. # 消息持久化目录
    log.dirs=/usr/local/kafka/kafkaLogs
  10.  
  11. # 可以删除主题
    delete.topic.enable=true
  12.  
  13. # 关闭自动创建topic
    auto.create.topics.enable=false
5、配置Kafka的环境变量
  1. # vi /etc/profile
  2.   export KAFKA_HOME=/usr/local/kafka
  3.   export PATH=$PATH:$KAFKA_HOME/bin
  4. # source /etc/profile
  5.  
  6. # vi /etc/hosts
  7.  
  8. # es为主机名 ,这里一定要注意,是主机名!!!!重要的话说三次!!!!!!!!
    127.0.0.1 es
    10.10.6.225 es
6、启动与停止Kafka
  1. # kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
  官方推荐启动方式:
  1. # /usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties &

但这种方式退出shell后会自动断开

停止:

  1. kafka-server-stop.sh
7、验证
  1. # jps
  2. 2608 Kafka
    2236 QuorumPeerMain
    2687 Jps
看到Kafka的进程,说明Kafka已经启动
 
8、创建topic
    创建名为test,partitions为3,replication为3的topic
  1. # kafka-topics.sh --create --zookeeper 10.10.6.225:2181 --partitions 1 --replication-factor 1 --topic test
    查看topic状态
  1. # kafka-topics.sh --describe --zookeeper 10.10.6.225:2181 --topic test
  2.   Topic:test      PartitionCount:1        ReplicationFactor:1     Configs:
       Topic: test     Partition: 0    Leader: 0       Replicas: 0     Isr: 0
 
    删除topic
    执行如下命令
  1. # kafka-topics.sh --delete --zookeeper 10.10.6.225:2181 --topic test
9、测试使用Kafka
    发送消息
  1. # kafka-console-producer.sh --broker-list 10.10.6.225:9092 --topic test
  2. 输入以下信息:
  3.   This is a message
  4.   This is another message
    接收消息
  1. # kafka-console-consumer.sh --bootstrap-server 10.10.6.225:9092 --topic test --from-beginning
    若看到上输入的信息说明已经搭建成功。
 
更复杂配置参考:
 
黄海添加于2018-02-11 夜
链接:https://pan.baidu.com/s/1i6HnIzr 密码:1soq
 
KafkaProducer.py
  1. # http://kafka-python.readthedocs.io/en/master/
  2. # 安装办法:
  3. # C:\Users\Administrator>pip install kafka-python
  4. # Collecting kafka-python
  5. # Downloading kafka_python-1.4.-py2.py3-none-any.whl (235kB)
  6. # % |████████████████████████████████| 235kB 150kB/s
  7. # Installing collected packages: kafka-python
  8. # Successfully installed kafka-python-1.4.
  9. # http://blog.csdn.net/evankaka/article/details/52421314
  1. from kafka import KafkaProducer
    from Util.MySQLHelper import *
    import json
  2.  
  3. producer = KafkaProducer(bootstrap_servers='10.10.6.225:9092', value_serializer=lambda v: json.dumps(v).encode('utf-8'))
    db = MySQLHelper()
    sql = "select ID,RESOURCE_ID_INT,RESOURCE_ID_CHAR,RESOURCE_TITLE,RESOURCE_TYPE_NAME,RESOURCE_FORMAT,RESOURCE_PAGE,CAST(CREATE_TIME AS CHAR) AS CREATE_TIME,DOWN_COUNT,FILE_ID,RESOURCE_TYPE,STRUCTURE_ID,PERSON_ID,PERSON_NAME,IDENTITY_ID from t_resource_info limit 100"
    dt = db.query(sql)
  4.  
  5. print(len(dt))
  6.  
  7. for row in dt:
    producer.send('t_resource_info', row)
  8.  
  9. producer.flush()
  10.  
  11. print('恭喜,完成!')
  1.  

不依赖于MYSQL的数据提交:

  1. import json
  2. from kafka import KafkaProducer
  3. import datetime
  4.  
  5. # kafka的服务器位置
  6. kafka_servers = '10.10.6.194:9092'
  7.  
  8. # 日期的转换器
  9. class DateEncoder(json.JSONEncoder):
  10. def default(self, obj):
  11. if isinstance(obj, datetime.datetime):
  12. return obj.strftime('%Y-%m-%d %H:%M:%S')
  13. elif isinstance(obj, datetime.date):
  14. return obj.strftime("%Y-%m-%d")
  15. else:
  16. return json.JSONEncoder.default(self, obj)
  17.  
  18. # 黄海定义的输出信息的办法,带当前时间
  19. def logInfo(msg):
  20. i = datetime.datetime.now()
  21. print(" %s %s" % (i, msg))
  22.  
  23. # 统一的topic名称
  24. topicName = 'test'
  25.  
  26. dt=[{"id":1,"name":"刘备"},{"id":2,"name":"关羽"},{"id":3,"name":"张飞"}]
  27.  
  28. # kafka的生产者
  29. producer = KafkaProducer(bootstrap_servers=kafka_servers)
  30.  
  31. # # 将字段大写转为小写
  32. for row in dt:
  33. new_dics = {}
  34. for k, v in row.items():
  35. new_dics[k.lower()] = v
  36. jstr = json.dumps(new_dics, cls=DateEncoder)
  37. producer.send(topic=topicName, partition=0, value=jstr.encode('utf-8'))
  38. # 提交一下
  39. producer.flush()
  40. print('恭喜,完成!')

KafkaConsumer.py

  1. from kafka import KafkaConsumer
  2. import time
  3.  
  4. def log(str):
  5. t = time.strftime(r"%Y-%m-%d_%H-%M-%S", time.localtime())
  6. print("[%s]%s" % (t, str))
  7.  
  8. log('start consumer')
  9. # 消费192.168.120.:9092上的world 这个Topic,指定consumer group是consumer-
  10. consumer = KafkaConsumer('foobar', bootstrap_servers=['localhost:9092'])
  11. for msg in consumer:
  12. recv = "%s:%d:%d: key=%s value=%s" % (msg.topic, msg.partition, msg.offset, msg.key, msg.value)
  13. log(recv)

如果是想读取kafka记得的所有消费记录:

  1. from kafka import KafkaConsumer
  2. import time
  3.  
  4. # kafka的服务器位置
  5. kafka_servers = '10.10.6.194:9092'
  6. # 统一的topic名称
  7. topicName = 'test'
  8.  
  9. def log(str):
  10. t = time.strftime(r"%Y-%m-%d_%H-%M-%S", time.localtime())
  11. print("[%s]%s" % (t, str))
  12.  
  13. log('启动消费者...')
  14. # auto_offset_reset='earliest' 这个参数很重要,如果加上了,就是kafka记录的最后一条位置,如果不加,就是以后要插入的数据了。
  15. #consumer = KafkaConsumer(topicName, auto_offset_reset='earliest', bootstrap_servers=kafka_servers)
  16. consumer = KafkaConsumer(topicName, bootstrap_servers=kafka_servers)
  17. for msg in consumer:
  18. recv = "%s:%d:%d: key=%s value=%s" % (msg.topic, msg.partition, msg.offset, msg.key, msg.value)
  19. log(recv)

大数据统计分析平台之一、Kafka单机搭建的更多相关文章

  1. 大数据统计分析平台之二、ElasticSearch 6.2.1的安装与使用

    # 下载文件cd /usr/local/software wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch ...

  2. 大数据统计分析平台之三、Kibana安装和使用

    kibana安装 1.到官网下载kibana: cd /usr/local/software wget https://artifacts.elastic.co/downloads/kibana/ki ...

  3. 大数据计算平台Spark内核全面解读

    1.Spark介绍 Spark是起源于美国加州大学伯克利分校AMPLab的大数据计算平台,在2010年开源,目前是Apache软件基金会的顶级项目.随着Spark在大数据计算领域的暂露头角,越来越多的 ...

  4. 国内物联网平台(7):Ablecloud物联网自助开发和大数据云平台

    国内物联网平台(7)——Ablecloud物联网自助开发和大数据云平台 马智 平台定位 面向IoT硬件厂商,提供设备联网与管理.远程查看控制.定制化云端功能开发.海量硬件数据存储与分析等基础设施,加速 ...

  5. 王坚十年前的坚持,才有了今天世界顶级大数据计算平台MaxCompute

    如果说十年前,王坚创立阿里云让云计算在国内得到了普及,那么王坚带领团队自主研发的大数据计算平台MaxCompute则推动大数据技术向前跨越了一大步. 数据是企业的核心资产,但十年前阿里巴巴的算力已经无 ...

  6. 联童科技基于incubator-dolphinscheduler从0到1构建大数据调度平台之路

    联童科技是一家智能化母婴童产业平台,从事母婴童行业以及互联网技术多年,拥有丰富的母婴门店运营和系统开发经验,在会员经营和商品经营方面,能够围绕会员需求,深入场景,更贴近合作伙伴和消费者,提供最优服务产 ...

  7. 从 Airflow 到 Apache DolphinScheduler,有赞大数据开发平台的调度系统演进

    点击上方 蓝字关注我们 作者 | 宋哲琦 ✎ 编 者 按 在不久前的 Apache  DolphinScheduler Meetup 2021 上,有赞大数据开发平台负责人 宋哲琦 带来了平台调度系统 ...

  8. 大数据计算平台Spark内核解读

    1.Spark介绍 Spark是起源于美国加州大学伯克利分校AMPLab的大数据计算平台,在2010年开源,目前是Apache软件基金会的顶级项目.随着 Spark在大数据计算领域的暂露头角,越来越多 ...

  9. 大数据竞赛平台——Kaggle 入门

    Reference: http://blog.csdn.net/witnessai1/article/details/52612012 Kaggle是一个数据分析的竞赛平台,网址:https://ww ...

随机推荐

  1. Jenkins发送邮件中文乱码问题解决

    在环境变量中添加: JAVA_TOOL_OPTIONS  =  -Dfile.encoding=UTF8 配置好后,重启Jenkins即可

  2. Java NIO Socket编程实例

    各I/O模型优缺点 BIO通信模型 BIO主要的问题在于每当有一个新的客户端请求接入时,服务端必须创建一个新的线程处理新接入的客户端链路,一个线程只能处理一个客户端连接 线程池I/O编程 假如所有可用 ...

  3. Luogu5162 WD与积木(生成函数+多项式求逆)

    显然的做法是求出斯特林数,但没有什么优化空间. 考虑一种暴力dp,即设f[i]为i块积木的所有方案层数之和,g[i]为i块积木的方案数.转移时枚举第一层是哪些积木,于是有f[i]=g[i]+ΣC(i, ...

  4. BZOJ2741 FOTILE模拟赛L(分块+可持久化trie)

    显然做个前缀和之后变成询问区间内两个数异或最大值. 一种暴力做法是建好可持久化trie后直接枚举其中一个数查询,复杂度O(nmlogv). 观察到数据范围很微妙.考虑瞎分块. 设f[i][j]为第i个 ...

  5. Codeforces Round #374 (Div. 2) C(DAG上的DP)

    C. Journey time limit per test 3 seconds memory limit per test 256 megabytes input standard input ou ...

  6. 沉迷AC自动机无法自拔之:[UVA 11468] Substring

    图片加载可能有点慢,请跳过题面先看题解,谢谢 这个鬼题目,上一波套路好了 先用题目给的模板串建\(AC\)自动机,把单词结尾标记为 \(val=1\),然后在建好的\(AC\)自动机上跑 \(dp\) ...

  7. 【BZOJ1432】[ZJOI2009]Function(找规律)

    [BZOJ1432][ZJOI2009]Function(找规律) 题面 BZOJ 洛谷 题解 这...找找规律吧. #include<iostream> using namespace ...

  8. VBA:Excel使用SQL进行查询

    Sub Query() Dim Conn As Object, Rst As Object Dim strConn As String, strSQL As String Dim i As Integ ...

  9. Spring Boot 源码分析 数据源 + Mybatis 配置

    公司今年开始使用 Spring Boot 开发,当然使用 Spring Boot 也是大势所趋,尤其是现在微服务的趋向,当然是选择基于Spring Boot 的 Spring Cloud.(所谓的 S ...

  10. AngularJs -- 指令中使用子作用域

    下面将要介绍的指令会以父级作用域为原型生成子作用域.这种继承的机制可以创建一个隔离层,用来将需要协同工作的方法和数据模型对象放置在一起. ng-app和ng-controller是特殊的指令,因为它们 ...