Kafka start

1.What's Kafka:

kafka: 是一个高性能的跨语言的分布式发布,订阅消息系统,支持数据持久化,全分布式,支持在线和离线处理消息。

 

2.kafka优势

1.高吞吐率:在廉价的商用机器上单机可以支持每秒100条消息的读写。

2.消息持久化:内部所有下次都将持久化到磁盘,无消息的丢失,支持消息重放。(消息重放:如果active宕机,则backup会自启继续消息处理)

3.完全分布式:producer, broker, consumer均支持水平扩展。

4.满足同时在线处理和离线处理消息。

 

3.kafka基本架构 

4.kafka的安装与使用

1.去apache kafka官网下载kafka任意版本,apache kafka download  本人下载版本为:kafka_2.12-2.5.0.tgz

2. 解压tar包 

tar -xvf ./kafka_2.12-2.5.0.tgz

3.使用kafka自带的zookeeper启动kafka

##如果不确定需要zookeeper-server-start.sh需要哪些执行参数,可以直接运行命令 ./zookeeper-server-start.sh 系统即会提示需要哪些参数

##启动kafka自带zookeeper
root@ubuntu:/opt/kafka_2.12-2.5.0/bin# ./zookeeper-server-start.sh ../config/zookeeper.properties

##启动kafka broker
root@ubuntu:/opt/kafka_2.12-2.5.0/bin# ./kafka-server-start.sh ../config/server.properties

检查服务是否成功启动并监听
zookeeper: lsof -i:2182
kafka: lsof -i:9092

4.使用外部zookeeper启动kafka

去apache zookeeper官网下载zookeeper任意版本, zookeeper download, 本人下载版本为:apache-zookeeper-3.6.1-bin.tar.gz

##外部安装zookeeper
解压zookeeper: tar -xvf ./apache-zookeeper-3.6.1-bin.tar.gz

##启动zookeeper
root@ubuntu:/opt/apache-zookeeper-3.6.1-bin/bin# ./zkServer.sh start ../conf/zoo_sample.cfg

##启动kafka broker
./kafka-server-start.sh ../config/server.properties

 5.创建topic

kafka2.2之前版本:

##创建一个名叫topic1的topic,指定3个partition(分区),并且指定1个replicator(副本)
./kafka-topics.sh --zookeeper localhost:9092 --create --topic topic1 --partitions 3 --replication-factor 1

kafka2.2之后版本:

##创建一个名叫topic1的topic,指定3个partition(分区),并且指定1个replicator(副本)
./kafka-topics.sh --bootstrap-server localhost:9092 --create --topic topic1 --partitions 3 --replication-factor 1

6.使用console producer和consumer测试kafka

##kafka-console-consumer.sh 创建一个消费者控制台,消费者消费的消息内容会打印到控制台
##kafka-console-producer.sh 创建一个生产者控制台,生产者生产的消息内容会打印到控制台

##创建一个订阅topic1的consumer
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topic1

##创建一个向topic1发送消息的producer
./kafka-console-producer.sh --bootstrap-server localhost:9092 --topic topic1

此时在producer输入发送数据,即可看到订阅topic1的consumer接受到消息。

 

5.kafka细节及注意点

1.查看topic基本信息并解释

##查看topic1下的细节信息
./kafka-topics.sh  --bootstrap-server localhost:9092 --describe --topic topic1

  ##Example, 前提我们已在系统创建id分别为0,9,8 的broker, 并且已经手动杀死id=9的broker,用来模拟某些broker挂掉的情况
        Topic: topic3   PartitionCount: 2       ReplicationFactor: 3    Configs: segment.bytes=1073741824
        Topic: topic3   Partition: 0    Leader: 0       Replicas: 9,0,8 Isr: 0,8
        Topic: topic3   Partition: 1    Leader: 0       Replicas: 0,8,9 Isr: 0,8

Leader:主导节点(Only one),负责分区的所有读写操作,Leader节点都是随机选择的
        Replicas: 备份节点列表,无论节点是否为leader或者是否存活或死亡都将显示在此处
        Irs:同步备份节点,同步备份只在leader或其他活着的节点间进行,所以此处并不会显示死亡的节点

2.同步producer和异步producer区别

Synchronized Producer:同步producer

解释: 同步消息生产者,消息发送成功后再尝试发送下一条消息,如果不成功的话就会retry,retry3次后依旧不成功的话就需要其他策略来解决这个问题
        -策略一:将消息发送到稳定的broker中
        -策略二:消息发送不成功捕获异常,在catch块再一次尝试发送消息
    特点:
        1.低延迟 (消息实时发送)
        2.低吞吐率
        3.无数据丢失(消息发送失败,存在相关策略解决问题)

Aynchronized Producer:    异步producer

解释: 异步消息生产者,send操作并没有真实的及时发送消息,而是将所有的消息保存到一个消息queue中,之后由相关负载线程遍历queue进行实际的批量消息发送
    特点:
	1.高延迟 (消息并未实时发送,而是先进入了消息queue)
	2.高吞吐率 (批量消息发送)
	3.可能存在数据丢失(消息发送失败没有相关策略解决问题,从而导致消息丢失)

3.zookeeper在kafka中的作用

#.记录每条Message的唯一标识(offset)---即每条消息在磁盘logfile的位置
        #.假如当kafka中某个partition故障或新增,那么zookeeper将立即通知生产者和消费者
        #.其实zookeeper是一个分布式的分层级的文件系统

4.topic和partition

Topic:
	1.同一个topic的消息可以分布在一个或多个节点(Broker)上
	2.某一类topic

Partition:
	1.一个topic里面可以存在多个partition
	2.partition之间存在leader即replication(备份)的区别,并且在同一个topic里面的partition是存在消息同步的。
	3.当leader partition死掉后会有备份partition出来担当leader partition,从而保证消息不会丢失。

* 一个Topic可以认为是一类消息,每个topic将被分成多个partition(区),每个partition在存储层面是append log文件
		任何发布到此partition的消息都会被直接追加到log文件的尾部,每条消息在文件中的位置称为offset(偏移量),offset为一个long型数字,它是唯一标记一条消息。它唯一的标记一条消息。kafka并没有提供其他额外的索引机制来存储offset,
		因为在kafka中几乎不允许对消息进行“随机读写”

* kafka和JMS(Java Message Service)实现(activeMQ)不同的是:即使消息被消费,消息仍然不会被立即删除.
		日志文件将会根据broker中的配置要求,保留一定的时间之后删除;

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值