kafka系列一(kafka基本知识)

                Kafka基础知识

 

一、   kafak介绍

Kafka是一个消息引擎,主要是用来削峰填谷,做到发送方和接受方的松耦合,减少系统的不必要交互。Kafka应用的几个场景:(1)消息系统;(2)应用监控;(3)网站用户行为追踪(4)流处理。(5)持久性日志。    

二、   常见的消息队列比较

常用的消息队列有ActiveMQ、RabbitMQ、Kafka ZeroMq、

 

ActiveMQ

RabbitMQ

Kafka

ZeroMq

所属公司

Apache

Mozilla Public License

Apache/Linkedln

iMatix

开发语言

Java

Erlang

Scala

c/c++

支持协议

AMQP、Openwire等

AMQP

仿AMQP

zeromq

事务

支持

不支持

不支持

事务

集群

支持

支持

支持

支持

负载均衡

支持

支持

支持

支持

动态扩容

不支持

不支持

支持(zk)

不支持

消息持久化

支持

支持

支持

不支持

说明:

1)   zeroMq采用底层语言,史上最快的消息队列,是一个网络编程的pattern库。某些功能需要进行大量的编程。

2)   在可靠性和可用性上,RabbitMQ是首选,虽然ActiveMQ也具备,但是它性能不及RabbitMQ。

3)   Kafka的吞吐量、tps比RabbitMq要强。

4)   高并发:RabbitMQ最高,原因是它的语言是天生具备高并发高可用的erlang语言。

 

三、   kafka专业术语

1)   消息:Message。消息实体,是通信的基本单位。

2)   主题:Topic。主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。

3)   分区:Partition。一个有序不变的消息序列。每个主题Topic下可以有多个分区。

4)   消息位移:Offset。表示分区中每条消息的位置信息,是一个单调递增且不变的值。

5)   缓存代理,Broker。Kafka集群中的一台或多台服务器统称broker。

6)   副本:Replica。Kafka 中同一条消息能够被拷贝到多个地方以提供数据冗余,这些地方就是所谓的副本。副本还分为领导者副本和追随者副本,各自有不同的角色划分。副本是在分区层级下的,即每个分区可配置多个副本实现高可用。

7)   生产者:Producer。向主题发布新消息的应用程序。

8)   消费者:Consumer。从主题订阅新消息的应用程序。

9)   消费者位移:Consumer Offset。表示消费者消费进度,每个消费者都有自己的消费者位移。

10)  消费者组:Consumer Group。多个消费者实例共同组成的一个组,同时消费多个分区以实现高吞吐。

11)  重平衡:Rebalance。消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。Rebalance 是 Kafka 消费者端实现高可用的重要手段。

 

说明:

l  分区是kafka并行操作的最小单元,在一定范围内,越多分区可以带来更高的吞吐量。

l  生产者的每条消息只能发送到一个分区中。同一时刻,每一个分区只能由同一个消费组内的consumer来消费。

l  Zookeeper是3.4.6是比较稳定的。

l  Kafka可以每秒处理10万多条数据。

l  Kafka采用三层消息架构:第一层主题层,主题可以分区,分区具备副本数;第二层分区层,分区中的副本具备主备;第三层消息层,分区中若干条信息,具备offerset.

l  一般消息传输协议会有:

点对点模式(消息队列):系统A发送只能系统B接受

发布/订阅模式:多个发送者,多个接受者

将多个消费者放在同一个消费组里,可以实现消息队列;将多个消费者分散在多个消费组里,可以实现发布-订阅模式。理想情况下,Consumer实例的数量应该等于该Group订阅主题的分区总数。

l  Kafka数据持久化

kafka使用消息日志来进行保存数据,一个日志文件只能是追加写消息,所以是顺序读写,可以提高kafka的吞吐量;

kafka可以进一步将日志进行划分成多个日志段(log segment),可以将老的日志保存起来,同时会定期的检查老的日志,能够做到定期清理。

l  磁盘提高效率的方法:预读和合并写

l  磁盘顺序写的速度大概是300M/s,随机写的速度只有50K/s,两者相差的速度将近10000倍。

l  磁盘组Raid:

Raid-0一块盘

Raid-1 两块盘

Radi-5 三块盘,可以坏一块

Raid-6三块或者四块,可以坏一块

 

四、   Kafka常用参数

1)   zookeeper.connect:kafka连接zookeeper的节点

2)   listeners:listener:PLAINTEXT://***:9092告诉外部连接如何连接kafka服务

3)   advertised.listeners:对外发布的连接kafak服务

4)   auto.create.topics.enable:自动创建topic

config/server.properties配置文件中配置了auto.create.topics.enable参数为true(默认值就是true),生产环境建议设置成false

5)   unclean.leader.election.enable:是否允许非完全的分区leader选举。

生产环境建议调整unclean.leader.election.enable参数为false(默认为true)

6)   auto.leader.rebalance.enable:是否允许定期自动将分区leader换为优先副本

生产环境建议调整auto.leader.rebalance.enable参数为false(默认为true)

可以脚本执行来实现,副本选举:

bin/kafka-preferred-replica-election.sh --zookeeper zookeeper:2181

7)   log.retention: 控制消息数据被保存时间

默认是7天

8)   log.rention.bytes

Broker为消息的总磁盘容量大小,默认是-1,即保存多少数据都可以

9)   message.max.bytes

broker能够接受最大的消息大小。默认是:1000012.可以适当的调大,但是要比消费端的fetch.message.max.bytes更小。

10)  max.connections.per.ip

能够和broker建立的最大连接数,默认是无限制

 

五、   kafka基本操作

#创建topic

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

#查看所有主题

bin/kafka-topics.sh --list --zookeeper zookeeper:2181

#产看主题的详细信息

bin/kafka-topics.sh  --zookeeper zookeeper:2181 --topic test --describe

#产看所有包含失效副本osr的分区

bin/kafka-topics.sh  --zookeeper zookeeper:2181 --describe --under-replicated-partitions

#查看主题中没有leader副本的分区,即isr为空导致分区leader为-1

bin/kafka-topics.sh  --zookeeper zookeeper:2181 --describe --unavailable-partitions

# 增加主题的分区数

bin/kafka-topics.sh  --zookeeper zookeeper:2181 --topic test --alter --partitions 2

#删除topic

bin/kafka-topics.sh --zookeeper zookeeper:2181 --topic test --delete

#生产者

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

#消费者

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

#创建消费组:

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --consumer-property group.id=g2

#消费组详细信息:

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group g2

#消费组列表:

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list

 

六、   kafka定位方法

常规定位方法:

1、 docker logs kafka

2、 zkCli工具

3、 netstat查看kafka的连接数

 

posted on 2020-08-08 17:15  星星眨着眼  阅读(544)  评论(0编辑  收藏  举报

导航