Kafka入门

kfaka简单介绍

1. Kafka是什么?

  1. 分布式的流式数据处理平台
  2. 可以用它来发布和订阅流式的记录,这一方面与消息队列或者企业消息系统类似
  3. 它将流式的数据安全地存储在分布式、有副本备份、容错的集群上 可以用来做流式计算
  4. 如果说其它中间件是高速公路,而Kafka则是停车场,也可以将消息直接与数据库交互

2. Kafka适合什么样的场景? 它可以用于两大类别的应用:

  1. 构造实时流数据管道,它可以在系统或应用之间可靠地获取数据。 (相当于message queue)
  2. 构建实时流式应用程序,对这些流数据进行转换或者影响。 (就是流处理,通过kafka stream topic和topic之间内部进行变化)

3. Kafka的架构体系

分布式集群:

      Kafka作为一个集群,运行在一台或者多台服务器上. Kafka 通过 topic 对存储的流数据进行分类。

 Kafka有四个核心的API:

  1. The Producer API 允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。
  2. The Consumer API 允许一个应用程序订阅一个或多个 topic ,并且对发布给他们的流式数据进行 处理。
  3. The Streams API 允许一个应用程序作为一个 ,消费一个或者多个topic产生的输入流, 然后生产一个输出流到一个或多个topic中去,在输入输出流中进行有效的转换。
  4. The Connector API 允许构建并运行可重用的生产者或者消费者,将Kafka topics连接到已存在的 应用程序或者数据系统。比如,连接到一个关系型数据库,捕捉表(table)的所有变更内容。

        在Kafka中,客户端和服务器使用一个简单、高性能、支持多语言的 TCP 协议.此协议版本化并且向下兼 容老版本, 我们为Kafka提供了Java客户端,也支持许多其他语言的客户端。

安装Kafka(Java1.8及以上)

1.下载安装包:https://www.apache.org/dyn/closer.cgi?path=/kafka/2.3.0/kafka_2.12-2.3.0.tgz(集成了Windows版)

2.下载好,目录结构如下:

      其中config配置目录里面有个文件server.properties,这是配置Kafka服务端的一些配置信息,以下是常用的(zk为存储Kafka集群信息)

启动 kafka     

1. 首先要启动zk,需要指定其配置文件 类似redis.conf(进入到安装目录)

bin/zookeeper-server-start.sh config/zookeeper.properties &

      备注:Kafka集群使用zookeeper来存储元信息,在生产环境下你应该独立安装一个zookeeper集群。学 习可以使用Kafka安装包中内置的zookeeper,启动一个单实例的zookeeper

2. 启动Kafka 服务端,指向server配置文件

bin/kafka-server-start.sh config/server.properties &  --启动
bin/kafka-server-stop.sh config/server.properties &  --停止

Kafka集群搭建

  • 【生产集群】在其他机器上同样安装kafka,配置它们连接到同一个zookeeper集群、它们的唯一id,数据目录,启动Broker实例即加入集群。
  • 【学习用集群】在同一台机器上启动多个broker实例,按如下步骤操作来搭建一个3节点的集群

1. 拷贝配置文件

cp config/server.properties config/server-1.properties
cp config/server.properties config/server-2.properties

2. 修改配置文件:

config/server-1.properties、config/server-1.properties:

 
broker.id=1
listeners=PLAINTEXT://:9093
log.dirs=自定义地址
broker.id=2
listeners=PLAINTEXT://:9094
log.dirs=自定义地址
3. 启动这两个broker实例
bin/kafka-server-start.sh config/server-1.properties &  --启动
bin/kafka-server-start.sh config/server-2.properties &  --启动

4.【启动失败说明】

    如果启动第二个或第三个broker时提示内存不够用,可以做如下调整: 

  1. 调大你的虚拟机的内存(1G 或更多)

调小Kafka的堆大小,默认是1G,生产用时可以调大。这里学习用可以调为256M(不能太小 了,启动时会heap OOM)

vi bin/kafka-server-start.sh
--修改
export KAFKA_HEAP_OPTS="-Xmx256M -Xms256M" 最大最小设为同一值(减少内存的申请和 回收)

5.启动结果:并用zk服务查看broker节点状态

创建topic

--创建topic
(base) humingmingdeMacBook-Pro:bin humingming$ ./kafka-topics.sh --create --bootstrap-server 192.168.0.101:9092 --replication-factor 3 --partitions 1 --topic my-1-topic
--订阅该topic
(base) humingmingdeMacBook-Pro:bin humingming$ ./kafka-topics.sh --describe --bootstrap-server 192.168.0.101:9092 --topic my-1-topic
Topic:my-1-topic	PartitionCount:1	ReplicationFactor:3	Configs:segment.bytes=1073741824
	Topic: my-1-topic	Partition: 0	Leader: 2	Replicas: 2,1,0	Isr: 2,1,0

    Topic: my-1-topic    Partition: 0    Leader: 2    Replicas: 2,1,0    Isr: 2,1,0

  • --partitions 1       分片数(分片是对主题topic的数据的分布式存储,对数据的物理分割,类似于分库分表),这个主题有几个分片,一般是创建消息的时候会指定看是否需要分片
  • --replication-factor 3    表示备份因子,副本数为3(哪个副本挂了,不怕丢,3个副本在分布式环境分别放在三台服务器,我这里仅仅是单台服务器)
  • --topic my-1-topic    主题名
  • partition:0  分片号
  • Leader:0 leader 副本在2号broker上
  • Isr:2,1,0  in sync 处于同步状态的broker,哪些当前boker是活着的,与leader节点是联通的

这里是创建了一个  有一个分片,每个分片有3个副本的主题,一般一台机器有一个broker,分片的一个副本放在一个broker上 

发送消息

--往某一台机器上发送消息
(base) humingmingdeMacBook-Pro:bin humingming$ ./kafka-console-producer.sh --broker-list 192.168.1.101:9092 --topic my-1-topic
>hello kafka
>hello kafka2

--消费消息  从开始进行消费  
(base) humingmingdeMacBook-Pro:bin humingming$ ./kafka-console-consumer.sh --bootstrap-server 192.168.1.101:9092 --from-beginning --topic my-1-topic
hello kafka
hello kafka2

图形化管理工具

        目前fkaka市面上很多开源的图形化管理工具(类似rocketmq的admin控制台),但真正好用的几乎没有,我推荐的这个是稍微好用的点 地址:url,可以实时监控:Kafka集群状态Topic、Consumer Group列表、图形化展示topic和consumer之间的关系、图形化展示consumer的Offset、Lag等信息

java -cp KafkaOffsetMonitor-assembly-0.2.0.jar \
     com.quantifind.kafka.offsetapp.OffsetGetterWeb \
     --zk zk-server1,zk-server2 \
     --port 8088 \
     --refresh 10.seconds \
     --retain 2.days

        给大家解释以下这条启动命令的含义,

其中,offsetStorage目前只支持kaka,zk按照host1:port1,host2:port2…的格式去写即可,port为开启web界面的端口号,refresh为刷新时间,retain为数据保留时间(单位seconds, minutes, hours, days)。当然,你也可以把这个命令写成脚本,保存起来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值