kafka topic制定规则

kafka topic的制定,我们要考虑的问题有很多,比如生产环境中用几备份、partition数目多少合适、用几台机器支撑数据量,这些方面如何去考量?笔者根据实际的维护经验,写一些思考,希望大家指正。

1.replicas数目

 

  可以从上图看到,备份越多,性能越低,因为kafka的写入只写入主分区,备份相当于消费者从主分区pull数据,这样势必会造成性能的损耗,故建议在生产环境中使用一主一备即可。

2. partition数量

  (1)设置partition数量的时候我们需要注意:kafka的partition可以在创建时候指定,也可以alter(kafka-topic.sh里面的参数),但是,这个修改只能增加partition数目,并不能减少。这带来的直接影响就是我们在设置按照日志数量回滚数据的时候(即:设置log.retention.bytes控制日志清除),需要考虑大小,因为log.retention.bytes设置的是partition的日志大小。

  (2)partition的数目并不是越多越好,以下是笔者所做的性能测试。

    //todo

    可以看到,当partition数目是broker数目的整数倍的时候,它的TPS较高,非整数倍的时候,由于数据不均衡,所以TPS会有不同程度的影响。

3.消费速度

  消费速度需要进行性能测试做相应评估,消费者/生产者加机器,都可以带来性能的线性增加。

  

4.制定规则

综上考虑,笔者在生产环境中的实践规则如下:

  • Partition数量=broker数量*2[这个作为预先设置,设置小一点,如果线上机器不够,增加机器的话,同时topic也会增加2,增量不要设置太大]
  • partition数量需要大于consumer数量
  • partition数量过多会给consumer带来额外的开销,建议consumer线程数(消费者个数)设置为partition数目,或略小于即可。
  • broker数量 =目标吞吐量/max(producer吞吐量,consumer吞吐量)

5.reference

如何确定Kafka的分区数、key和consumer线程数

kafka benchmark

kafka深度解析

How to choose the number of topics/partitions in a Kafka cluster?

时间: 2024-10-13 07:38:24

kafka topic制定规则的相关文章

Kafka Topic Partition Replica Assignment实现原理及资源隔离方案

本文共分为三个部分: Kafka Topic创建方式 Kafka Topic Partitions Assignment实现原理 Kafka资源隔离方案 1. Kafka Topic创建方式 Kafka Topic创建方式有以下两种表现形式: (1)创建Topic时直接指定Topic Partition Replica与Kafka Broker之间的存储映射关系 /usr/lib/kafka_2.10-0.8.2.1/bin/kafka-topics.sh --zookeeper ZooKeep

手动删除Kafka Topic

一.删除Kafka topic 运行./bin/kafka-topics  --delete --zookeeper [zookeeper server]  --topic [topic name]:如果kafaka启动时加载的配置文件中server.properties没有配置delete.topic.enable=true,那么此时的删除并不是真正的删除,而是把topic标记为:marked for deletion 可以通过命令:./bin/kafka-topics --zookeeper

用canal同步binlog到kafka,spark streaming消费kafka topic乱码问题

canal 1.1.1版本之后, 默认支持将canal server接收到的binlog数据直接投递到MQ, 目前默认支持的MQ系统有kafka和RocketMQ. 在投递的时候我们使用的是非压平的消息模式(canal.mq.flatMessage =false //是否为flat json格式对象),然后消费topic的时候就一直无法正常显示和序列化,通过kafka-console-consumer.sh命令收到的消息如下图 在github上也能找到相关问题 canal-kafka 数据同步到

关于Flink slot 和kafka topic 分区关系的说明

今天又有小伙伴在群里问 slot 和 kafka topic 分区(以下topic,默认为 kafka 的 topic )的关系,大概回答了一下,这里整理一份 首先必须明确的是,Flink Task Manager 的 slot 数 和 topic 的分区数是没有直接关系的,而这个问题其实是问的是: 任务的并发数与 slot 数的关系 最大并发数 = slot 数 这里有两个原因:每个算子的不同并行不能在同一slot,不同的算子可以共享 slot ,所以最大并行度 就等于 slot 数. 这样就

flume写kafka topic覆盖问题fix

结构: nginx-flume->kafka->flume->kafka(因为牵扯到跨机房问题,在两个kafka之间加了个flume,蛋疼..) 现象: 在第二层,写入kafka的topic和读取的kafka的topic相同,手动设定的sink topic不生效 打开debug日志: source实例化: 21 Apr 2015 19:24:03,146 INFO [conf-file-poller-0] (org.apache.flume.source.DefaultSourceFac

重置kafka topic consumer的offset

如果你在使用Kafka来分发消息,在数据处理的过程中可能会出现处理程序出异常或者是其它的错误,会造成数据丢失或不一致.这个时候你也许会想要通过kafka把数据从新处理一遍,我们知道kafka默认会在磁盘上保存到7天的数据,你只需要把kafka的某个topic的consumer的offset设置为某个值或者是最小值,就可以使该consumer从你设置的那个点开始消费. 查询topic的offset的范围 用下面命令可以查询到topic:DynamicRange broker:SparkMaster

Kafka Topic动态迁移 (源代码解析)

总结下自己在尝试Kafka分区迁移过程中对这部分知识的理解,请路过高手指正. 关于Kafka数据迁移的具体步骤指导,请参考如下链接:http://www.cnblogs.com/dycg/p/3922352.html原文作者写的非常清晰. 本文主要侧重自己对相关Kafka源代码的理解: generateAssignment()函数 (对应上述链接原文中的  --generate 参数)产生新的迁移计划,输出格式为Json字符串: executeAssignment ()函数(对应上述链接原文中的

Kafka topic常见命令解析

本文着重介绍几个常用的topic命令行命令,包括listTopic,createTopic,deleteTopic和describeTopic等.由于alterTopic并不是很常用,本文中就不涉及了.另外本文的代码分析是基于kafka_2.10-0.8.2.1的(虽然截图是Kafka 0.8.1的^_^ )   一. list topic 显示所有topic 1. 从zookeeper的/brokers/topics节点下获取所有topic封装成topic集合 2. 遍历该集合,查看每个top

Kafka Topic的详细信息 捎带主要的安装步骤

1. 安装步骤 Kafka伪分布式安装的思路跟Zookeeper的伪分布式安装思路完全一样,不过比Zookeeper稍微简单些(不需要创建myid文件), 主要是针对每个Kafka服务器配置一个单独的server.properties,三个服务器分别使用server.properties,server.1.properties, server.2.properties cp server.properties server.1.properties cp server.properties se