02_Kafka单节点实践
1、实践场景

开始前的准备条件:
1) 确认各个节点的jdk版本,将jdk升级到和kafka配套的版本(解压既完成安装,修改/etc/profile下的JAVA_HOME,source /etc/profile,重启后jdk生效)
2、单节点kafka实践
1) 启动zookeeper集群
各个节点上启动zookeeper进程
# bin/zkServer.sh start
启动后,查看各个节点的zookeeper状态 (leader, follower etc)
#bin/zkServer.sh status
2) 配置kafka的zk集群
配置文件:config/zookeeper.properties
配置要点:zookeeper中snapshot数据的存放地址,和zookeeper集群中的配置保持一致

3) 配置本节点上要启动的broker
配置文件: config/server.properties
配置要点:
broker.id
log.dirs (将在该路径下自动创建partition目录)
zookeeper.connect (broker要连接的zookeeper集群地址和port)
检查broker发布给producer和consumer的主机名和端口号(9092)
配置后的参数如下:
# broker id, 每个broker的id必须是唯一的
broker.id= # kafka存放消息的目录
log.dirs=/usr/local/src/kafka_2./tmp/ # broker连接的zk集群,节点间通过逗号分隔,默认zk开放给客户端连接的端口号是2181
zookeeper.connect=master:,slave1:,slave2:

注意:
1) 默认Kafka会直接在ZooKeeper的根路径下创建znode,这样Kafka的ZooKeeper配置就会散落在根路径下面
2) 可以指定kafka在zookeeper的某个路径下去进行操作, 将server.properties中的zookeeper.connect修改为:
a. zookeeper.connect=master:2181,slave1:2181,slave2:2181/kafka
b. 同时手动在zookeeper中创建/kafka节点 (create /kafka)
4)启动单个Broker
# ./bin/kafka-server-start.sh ./config/server.properties

5)查看当前kafka集群中的Topic
# ./bin/kafka-topics.sh --list --zookeeper master:2181,slave1:2181,slave2:2181
# ./bin/kafka-topics.sh --list --zookeeper master:2181,slave1:2181,slave2:2181/kafka # 如果修改了kafka在zookeeper下的znode节点路径,则要在--zookeeper参数中跟上chroot路径
6) 创建topic
创建Topic时,会根据broker的个数,对replication-factor进行校验;
# ./bin/kafka-topics.sh --create --zookeeper master:2181,slave1:2181,slave2:2181 --replication-factor 1 --partitions 1 --topic mytopic
7) 查看topic描述信息
# ./bin/kafka-topics.sh --describe --zookeeper master:2181,slave1:2181,slave2:2181 --topic mytopic

partition:0 该partition的编号,从0开始
leader:0 该partition的leader节点的broker.id = 0
replicas:0 表示partition落地的所有broker, 包括leader在内
isr:0 当前处于in-sync的replicas节点, 包括leader在内, broker.id = 0
8) zookeeper上将记录kafka已经创建的topic

9)broker的log.dirs中将创建partition目录
目录名:topic名-partition编号 //编号从0开始
mytopic-0

10)Partition目录下的segment文件

每一个segment,都会由 log文件,index文件 组成

解析:
xxxx.log -- 最初的log文件,文件名是初始偏移(base offset), 消息存储在log文件
xxxx.index -- 最初的index文件,文件名是初始偏移(base offset),index则用于对应log文件内的消息检索
offset, postion
offset, 消息计数; postion,消息头在log文件中的起始位置(position从0开始)
index文件可以映射到内存,从index文件的名字可以判断出某一个消息应该位于哪一个log文件

segment文件的默认最大size为1G,超过该size后才会创建新的segment文件,新的segment文件将称为active segment, 数据是向active segment写入
11) 调整Topic的partition个数
只能增加,不能减少
# ./bin/kafka-topics.sh --alter --zookeeper master:2181,slave1:2181,slave2:2181 --topic mytopic --partitions 2

物理的partition目录,也变为了2个

12)使用kafka提供的Producer客户端,模拟消息发送
# bin/kafka-console-producer.sh --broker-list localhost:9092 --topic mytopic
--broker-list: 该producer要向哪些broker推送消息, ip:port形式说明
--topic: 该producer要向哪一个Topic发送消息
启动producer客户端后,每行都会作为一条message, 存储到该topic的partition文件下的log文件中

13) 查看log文件中,消息落地到了哪里
1) 由于消息中没有指定key, kafka将针对每条message,随机找一个partition进行存放
2)4条消息,存储到了两个分区mytopic-0和mytopic-1下
mytopic-0分区,log文件存储了2条消息

mytopic-1分区,log文件存储了2条消息

14)启动Consumer, 模拟消息的消费
1、Consumer消费消息时,只需要指定topic+offset
2、通过zookeeper获取topic的partition位于哪些broker上,各自的leader broker是谁,然后和leader broker连接,获取数据
./bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic mytopic --from-beginning
3、观察多个partition下,consumer端数据的顺序
topic有2个分区,consumer端得到的数据顺序和发送端的不一定相同,但每个partiton内部的消息顺序能够保证(非全局有序,partition内部有序)

02_Kafka单节点实践的更多相关文章
- 02_Flume1.6.0安装及单节点Agent实践
Flume1.6.0的安装1.上传Flume-1.6.0-tar.gz到待部署的所有机器 以我的为例: /usr/local/src/ 2.解压得到flume文件夹 # tar -x ...
- 恒天云单节点部署指南--OpenStack H版本虚拟机单节点部署解决方案
本帖是openstack单节点在虚拟机上部署的实践.想要玩玩和学习openstack的小伙伴都看过来,尤其是那些部署openstack失败的小伙伴.本帖可以让你先领略一下openstack的魅力.本I ...
- Hadoop 2.2.0单节点的伪分布集成环境搭建
Hadoop版本发展历史 第一代Hadoop被称为Hadoop 1.0 1)0.20.x 2)0.21.x 3)0.22.x 第二代Hadoop被称为Hadoop 2.0(HDFS Federatio ...
- ASP.NET Core on K8S学习初探(1)K8S单节点环境搭建
当近期的一个App上线后,发现目前的docker实例(应用服务BFF+中台服务+工具服务)已经很多了,而我司目前没有专业的运维人员,发现运维的成本逐渐开始上来,所以容器编排也就需要提上议程.因此我决定 ...
- 阿里云ECS单节点Kubernetes部署
参考资料: kubernetes官网英文版 kubernetes官网中文版 环境.工具 阿里云学生机ECS.Ubuntu.docker.kubectl1.15.4.kubelet1.15.4.kube ...
- 阿里云ECS(Ubuntu)单节点Kubernetes部署
参考资料: kubernetes官网英文版 kubernetes官网中文版 前言 这篇文章是比较久之前写的了,无聊翻了下博客发现好几篇博文排版莫名其妙的变了... 于是修改并完善了下.当初刚玩k8s的 ...
- Vertica集群单节点宕机恢复方法
Vertica集群单节点宕机恢复方法 第一种方法: 直接通过admintools -> 5 Restart Vertica on Host 第二种方法: 若第一种方法无法恢复,则清空宕机节点的c ...
- Hbase入门教程--单节点伪分布式模式的安装与使用
Hbase入门简介 HBase是一个分布式的.面向列的开源数据库,该技术来源于 FayChang 所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统".就像 ...
- 基于英特尔® 至强 E5 系列处理器的单节点 Caffe 评分和训练
原文链接 在互联网搜索引擎和医疗成像等诸多领域,深度神经网络 (DNN) 应用的重要性正在不断提升. Pradeep Dubey 在其博文中概述了英特尔® 架构机器学习愿景. 英特尔正在实现 Prad ...
随机推荐
- 模仿linux内核定时器代码,用python语言实现定时器
大学无聊的时候看过linux内核的定时器,如今已经想不起来了,也不知道当时有没有看懂,如今想要模仿linux内核的定时器.用python写一个定时器,已经想不起来它的设计原理了.找了一篇blog,li ...
- adb server version (31) doesn't match this client (36)
运行adb 命令的时候报错: C:\Users\Administrator>adb devices List of devices attachedadb server version (31) ...
- iota 币产生私钥的方法
iota 币的官网是 iota.org, iota 的官网推荐的钱包地址是: https://github.com/iotaledger/wallet iota 币产生私钥是没有什么特殊的要 ...
- 【Win7 x64】+【annaconda3】+ 【python3.5.2】+【tensorflow-gpu】 [最终配置 gtx 940mx + Cuda8.0+cudnn v5.1 + tensorflow-gpu1.0.0 ]
1.安装cuda Toolkit 和cudnn (百度云可下载,版本需要对应) 2.配置环境变量: 3.安装cudnn(需要拷贝一些dll和lib来进行配置) 4.进入cmd,找到anaconda3的 ...
- 如何提取app软件的apk格式中的字体?
1.下载apk格式的指定app软件: 2.将apk格式的文件名更改为后缀名为zip格式: 3.用winrar解压软件解压,然后就找到其中的ttf格式的字体文件. 举例说明,我想找到airbnb的app ...
- nginx 总结
本文转自:http://freeloda.blog.51cto.com/2033581/1288553 ,感谢大神的辛勤付出! 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之 ...
- selinux配置错误实例介绍
错误原因 配置关闭SELinux,结果误操作 应修改配置文件/etc/selinux/config中的“SELINUX”参数的值, # SELINUX=enforcing 原始配置 SELINUX= ...
- YAML配置文件
最近,研究jeeweb这个框架,发现新版本中的配置文件都是用的.yml为后缀的文件,打开一看,和以前的xml和properties语法有很大区别,因此仔细研究一下. 简介: YAML是(YAML Ai ...
- awk之match函数
功能:match函数是用于个性化定制搜索模式. 例子: 文件内容: this is wang ,not wan that is chen, not che this is chen ,and wang ...
- ThinkPHP5跨控制器调用
1.在application\index\controller\文件夹里新建User.php <?php namespace app\index\controller; class User{ ...