kafka基本配置(二)

kafka的安装、管理、和配置

安装

准备环境

       kafka是用Scala编写,但ta也是Java生态圈下的一员,运行在Java虚拟机上,所以安装运行和普通的Java程序没有什么区别。

       官方推荐使用Java8.

       kafka需要Zookeeper保存集群的元数据信息和消费者信息。kafka一般会自带Zookeeper,但是从稳定性考虑,使用单独的Zookeeper,而且构建Zookeeper集群。(Eclipse、MyEclipse不用自带的tomcat。。。)

下载和安装kafka

从官方http://kafka.apache.org/downloads 上下载合适的版本

运行

windows上运行:

       启动Zookeeper,进入kafka目录下的bin\windows,执行 “kafka-server-start.bat ../../config/server.properties”,出现以下画面表示成功;

Linux上运行:

      与windos类似,进入kafka的bin目录下,执行对应的 sh 文件即可。

基本的操作和管理

config目录下server.properties配置:

## 列出所有的主题

kafka-topics.bat --zookeeper localhost:2181/my-kafka --list

## 列出所有主题的详细信息

kafka-topics.bat --zookeeper localhost:2181/my-kafka --describe

## 创建出题 主题名 well , 1个副本,5个分区

kafka-topics.bat --zookeeper localhost:2181/my-kafka --create --topic well --replication-factor 1 --partitions 5

##增加分区,注意:分区无法被删除

kafka-topics.bat --zookeeper localhost:2181/my-kafka --alter --topic well --partitions 8

##删除主题

kafka-topics.bat --zookeeper localhost:2181/my-kafka --delete --topic well

##列出消费者群组(仅Linux

kafka-topics.sh --new-consumer --bootstrap-server localhost:9092/my-kafka --list

##列出消费者群组详细信息(仅Linux

kafka-topics.sh --new-consumer --bootstrap-server localhost:9092/my-kafka --describe --group 群组名

Broker配置

配置文件放在Kafka目录下的config目录中,主要是server.properties文件

常规配置

broker.id

       在单机时无需修改,但在集群下部署时往往需要修改。broker.id是 每一个broker在集群中的唯一标识,要求是正数。当该服务器的ip地址发生改变时,broker.id没有变化,则不会影响consumers(消费者)的消息情况。

listeners

       监听列表(以逗号分隔  不同的协议<如 ssl、trace、不同的IP和端口>),hostname如果设置为0.0.0.0 则绑定所有的网卡地址;如果hostname为空则绑定默认的网卡。如果没有配置则默认为 java.net.InetAddress.getCanonicalHostName()。

如:PLAINTEXT://myhost:9092,TRACE://:9091或 PLAINTEXT://0.0.0.0:9092,

zookeeper.connect

       zookeeper集群的地址, 可以是多个,多个之间用逗号分隔

log.dirs

       kafka把所有的消息都保存在磁盘上,存放这些数据的目录通过log.dirs指定。

num.recovery.threads.per.data.dir

       数据目录用于日志恢复启动和关闭时的线程数量。因为这些线程只是服务器启动和关闭时会用到。所以完全可以设置大量的线程来达到并行操作的目的。注意:这个参数指的是每个日志目录的线程数, 比如本参数设置为8,而log.dirs设置了三个路径,则总共会启动24个线程。

auto.create.topics.enable

      是否允许自动创建主题。如果设为true,那么produce(生产者),consume(消费者)或者fetch metadata(元数据)一个不存在的主题时,就会自动创建,缺省为true。

主题配置

新建时的默认参数。

num.partitions

       每个新建主题的分区个数。这个参数一般要评估,比如:每秒钟要写入和读取1GB数据,如果现在每个消费者每秒钟可以处理100MB的数据,需要10个分区,这样就可以让10个消费者同时读取这些分区,从而达到设计目标。

log.retention.hours

        日志保存时间,默认为7天(168小时)。超过这个时间会清理数据。bytes和minutes无论哪个先达到都会触发(https://blog.csdn.net/qq_31129841/article/details/106858976  就是第一节中说的消息保存策略)。与此类似的还有log.retention.minutes和log.retention.ms,都设置 优先使用具有最小值的那个。

log.retention.bytes

         topic每个分区的最大文件大小,一个topic的大小限制 = 分区数 * log.retention.bytes.。《-1》 没有大小限制。log.retention.bytes和log.retention.minutes任意一个达到要求,都会执行删除。

log.segment.bytes

       分区的日志存放在某个目录下诸多文件中,这些文件将分区的日志切分成一段一段的,称为日志片段。这个属性就是每个文件的最大尺寸;当尺寸达到这个数值时,就会关闭当前文件,并创建新文件。被关闭的文件就开始等待过期。默认为1G.

       如果一个主题每天只接收100MB的消息,那么根据默认设置,需要10天才能填满一个文件。而且因为日志片段在关闭之前,消息是不会过期的,所以 如果log.retention.hours保持默认值的话,那么这个日志片段需要17天才过期,因为关闭日志片段需要10天,等待过期又需要7天。

log.segment.ms

       作用和log.segment.bytes类似,只不过判断依据是时间。同样的,两个参数,以先到的为准。这个参数默认是不开启的。

message.max.bytes

       表示一个服务器能够接收处理消息的最大字节数,注意这个值 producer 和 consumer 必须设置一致,且不要大于 fetch.message.max.bytes属性的值。该值默认是 一百万 字节,大致是900KB~1MB。

硬件配置对kafka性能的影响

磁盘吞吐量/磁盘容量

       磁盘吞吐量会影响生产者的性能。因为生产者的消息必须被提交到服务器保存,大多数的客户端都会一直等待,直到至少有一个服务器确认消息已经成功提交为止。-------最终就是 磁盘写入速度越快,生成消息的延迟就越低。

       磁盘容量的大小,则主要看需要保存的消息数量,如果每天收到1TB的数据,并保留7天,那么磁盘就需要7TB的容量。

内存

       kafka本身并不需要太大内存,内存主要影响消费者性能。在大多数业务情况下,消费者消费的数据一般从内存中获取,这比在磁盘上读取要快的多。

网络

      网络吞吐量决定了kafka能够处理的最大数据流量。

CPU

      kafka对cpu的要求不高,主要是用在对消息解压和压缩上。所以cpu的性能不是在使用kafka首要考虑的因素。

kafka的集群

为何需要搭建kafka集群

    最主要的就是使用复制功能来避免单独kafka故障造成的数据丢失,集群可以跨服务器进行负载均衡,同时提供可用性;其实本地开发一台kafka足够使用。

怎样估算kafka集群中broker的数量

       ①需要多少磁盘空间保留数据,②每个broker上有多少空间可以用。如:一个集群有10TB的数据需要保留,每个broker可以存储2TB,至少需要5个broker。如果再启动了数据复制,则还需要一倍的空间,那么这个集群需要10个broker。

       ③集群处理请求的能力。如果因磁盘吞吐量和内存不足造成性能问题,可以通过扩展broker来解决。

broker如何加入kafka集群

    只需要改两个参数:

   ①配置zookeeper.connect,逗号分隔;例zookeeper.connect=localhost:2181/my-kafka1,xxxx:2182/my-kafka2

   ②为新增的broker.id设置集群内唯一性的id

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值