【发布时间】:2019-12-16 06:25:06
【问题描述】:
我创建了一个新的 Kafka 服务器(我创建了 1 个具有 1 个分区的代理),并且我成功地使用 Java 代码从该服务器生成和消费,但我对每秒读取的事件数量并不满意消费者。
我已经玩过以下消费者设置:
AUTO_OFFSET_RESET_CONFIG = "earliest"
FETCH_MAX_BYTES_CONFIG = 52428800
MAX_PARTITION_FETCH_BYTES_CONFIG = 1048576
MAX_POLL_RECORDS_CONFIG = 10000
pollDuration = 3000
但无论我为每个设置输入什么值,结果都保持不变
目前,我向 Kafka 生成了 100,000 条消息。 每条消息大小为 2 KB,读取所有批次的 100000 条记录需要 20669 毫秒或 20 秒(总时间),这意味着每秒 5000 条记录。
我希望它更高,我可以设置的最理想的值是多少,或者我可能需要使用其他设置,或者我需要设置我的 Kafka 服务器(多个代理或分区)?
【问题讨论】:
-
添加更多主题。添加更多分区。确保您运行多个并发使用者,并且与分区数量的比例相当(不一定是 1:1,但同样没有 100 个分区和一个读取器)。检查瓶颈,例如网络、磁盘等。也许您需要将分区分布在多个磁盘和/或集群 kafka 设置。编辑:如果这个帖子被删除,我不会感到惊讶,因为它只是“让它更快”,这并不是一个真正的问题
-
感谢您的回答:) 所以实际上您是说消费者设置与性能问题无关。根据您的回答,我认为可能会激活多个使用者实例(在 java 中使用多线程),并且每个线程将从不同的分区读取,这意味着不同的组 ID。这是你认为应该工作的东西吗?为什么你认为它会被删除?你可以说这是一个性能问题
-
对于最后一部分 - 它有点通用,有点 RTFM。无论如何 - 是的,您的消费者应该自动从不同的分区读取(取决于它的访问方式)。它进入了更棘手的领域,但是当您谈论“例如性能”时,您的分区可能是头重脚轻的(例如,不均匀分布)。您的瓶颈可能有多种原因(同样,它可能很慢,因为写入正在锤击它)。它不一定是万能的,可能需要几个月的时间才能找到满足您要求的解决方案。
-
AUTO_OFFSET_RESET_CONFIG 将从消息 0 中读取(前提是它没有被删除),因此可能不是您想要的行为 - 也许 LATEST 是最好的(尽管再次根据您的要求)。看看你是如何访问 kafka 实例的(通过连接器?)是否有任何争用。如果您的文章跟上,我会说问题仅出在您的消费者身上(目前)。
-
好的,至少我现在有了方向,谢谢!
标签: java apache-kafka kafka-consumer-api producer-consumer consumer