Kafka入门(1)

1.Kafka基本了解

(1)他是一个消息中间件,又叫分布式流平台,类似的还有MQ(消息队列),Redis等

(2)

Kafka:下面是三个进程                                                          Flume:下面三者一个进程

生产者                                                                                         source

broker:表示机器的kafka进程                                                     channel

消费者                                                                                          sink

(3)正常部署的就是broker进程,用来管理数据。一般流程就是Flume---->Kafka----->SparkStreaming

2.为什么需要Kafka或者其他的消息中间件呢?

主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达MySQL,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而触发too many connections错误。通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。

3.Kafka三大功能

(1)PUBLISH和SUBSCRIBE(发布和订阅):像消息传递系统一样读写数据流。

(2)PROCESS(处理):编写实时响应事件的可伸缩流处理应用程序。

(3)STORE:将数据流安全地存储在分布式、复制、容错的集群中。

4.部署

(1)注意分布式部署Zookeeper,开学回来记得搞得云主机来玩玩。

(2)ln -s(软连接):ln -s 物理文件夹/文件 快捷的文件夹/文件

软连接的作用:1)当你误删除了快捷方式,物理文件夹还在的,提高了架构的安全系数。

                         2)当你的大数据组件的版本更新的时候,不需要再去改其他的依赖组件的配置文件,只需要改的软连接就好。

(3)硬链接:1个文件有几个文件名(用ln命令实现多个文件名),我们就说该文件的链接数为几。由定义可知,此链接数可以是1, 这表明该文件只有一个文件名。总之,硬链接就是让多个不在或者同在一个目录下的文件名,同时能够修改同一个文件,其中一个修改后,所有与其有硬链接的文件都一起修改了。

(4)scp命令回顾:scp 要送的文件 目的机器目录(要么你配置了ssh无密码登陆,要么你知道目的机器的账户密码。)

5.启动Kafka

(1)先启动Zk:./zkServer.sh start

(2)启动kafka:nohup ./kafka-server-start.sh ../config/server.properties & 

(3)tpoic:用来表示数据的类别

创建topic:./kafka-topics.sh --create --zookeeper 192.168.137.251:2181 --replication-factor 1 --partitions 1 --topic test

--replication-factor:每一个分区下的副本数量,保证高容错,高可靠

--partitions:分区数量

(4)模拟生产者消费者:

生产者:

./kafka-console-producer.sh --broker-list 192.168.137.251:9092 --topic test //9092kafka节点间通信的默认端口

消费者:

./kafka-console-consumer.sh --bootstrap-server 192.168.137.251:9092 --topic test

(5)查看toic的详细信息:

命令:./kafka-topics.sh --describe --zookeeper 192.168.137.251:2181 --topic test

由于我的是单机,不好分析,就用老师的数据来学习

Topic:test      PartitionCount:3        ReplicationFactor:3     Configs:

 Topic: test     Partition: 0    Leader: 1       Replicas: 1,2,3 Isr: 1,2,3
 Topic: test     Partition: 1    Leader: 2       Replicas: 2,3,1 Isr: 2,3,1
 Topic: test     Partition: 2    Leader: 3       Replicas: 3,1,2 Isr: 3,1,2

Replicas:表示正在同步的副本数目,在那些partition上面

Isr:表示leader的排序,如果1挂了2就上,以此类推

杀死相关进程:kill -9 $(pgrep -f kafka)

重启进程快捷方法:!pid(history  前面出现的数字)

(6)修改topic分区

命令:./kafka-topics.sh --describe --zookeeper 192.168.137.251:2181 --topic test
作用:用于高并发时候,机器扛不住了,加机器缓解读写压力,增加加分区不会重新平衡的,数据默认的保存期是7天

(7)配置zk的问题

--zookeeper 192.168.137.251:2181,这是我的配置,由于在zk上没有创建目录,如果kafka出了问题或重装,要删掉,我就得慢慢删除这一堆文件,但是如果192.168.137.251:2181/kafka 加个文件夹,就不用这么麻烦了

(8)干净删除topic(这个就有点麻烦了,不然删不干净)

      1)将要删除的topic表示为待删除

bin/kafka-topics.sh --delete \
--zookeeper yws85:2181,yws86:2181,yws87:2181/kafka \
--topic test 

       2)去zk中删除对面的元数据,有下面三个admin,config,brokers

rmr /kafka/admin/delete_topics/test
rmr /kafka/config/topics/test
rmr /kafka/brokers/topics/test

       3)在每台机器中,在自己设置logs下面删除所有的分区信息xxx-*

rm -rf logs/test-*

6.Kafka分区有序的问题

(1)Kafka单个分区读写有序

(2)Kafka多个分区无序在生产上如何保证多个分区消费有序呢?

首先,了解无序读的弊端,假如MySQL执行下面的语句,在写入BINLOG是有序的,然后拉进Kafka

MySQL BINLOG 日志文件 按顺序----有序-----》Kafka test 3个分区

ruozedata.stu
id  name age

insert into stu values(1,'jepson',18);

insert into stu values(2,'ruoze',28);

update stu set age=26 where id=1;

delete from stu where id=1;

拉进Kafka之后如下
test-0:
insert into stu values(1,'jepson',18);


test-1:
insert into stu values(2,'ruoze',28);
delete from stu where id=1;

test-2:
update stu set age=26 where id=1;

消费时,顺序不同,这种就会报错!!
insert into stu values(2,'ruoze',28);
delete from stu where id=1;

insert into stu values(1,'jepson',18);

update stu set age=26 where id=1;

解决这一问题的核心点:  共性数据发送到同一个topic的1个分区(自定义分区策略,改变生产者的key值)

拼装的Key: ruozedata_stu_id=1  代码  hash(ruozedata_stu_id=1 ) 取模 0,1,2
    value: sql

test-0:
insert into stu values(1,'jepson',18);
update stu set age=26 where id=1;
delete from stu where id=1;


test-1:
insert into stu values(2,'ruoze',28);
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值