我有关于主题和分区的以下问题
1)n-topics与m-partitions和n m主题有什么区别? 使用n * m个不同的进程通过m个线程和n m个主题访问m分区时会有区别吗
2)区分高级别和低级别消费者的完美用例
3)如果发生故障(即)消息未送达,我在哪里可以找到Kafka中的错误日志。
答案 0 :(得分:16)
1)n-topics与m-partitions和nm主题有什么区别?
每个主题必须至少有一个分区。主题只是一组命名的分区,分区实际上是数据流。使用Kafka生产者的代码通常不关心分区,它只是向主题发送消息。 默认情况下,生产者使用循环方法选择分区来存储消息,但是如果需要可以创建自定义分区,并根据消息的内容选择分区。
如果只有一个分区,则只有一个代理处理该主题的消息并将它们附加到文件中。 另一方面,如果存在与代理一样多的分区,则消息处理被并行化并且存在多达m次(减去开销)加速。这假设每个代理都在自己的盒子上运行,而kafka数据存储不在代理之间共享。
如果主题的分区多于经纪人,Kafka会尝试在所有经纪人之间平均分配。
从卡夫卡读书也是如此。如果只有一个分区,则kafka使用者速度受单个磁盘的最大读取速度限制。如果有多个分区,则会并行检索来自所有分区(在不同代理上)的消息。
1a)使用n * m个不同的进程通过m个线程和nm主题访问m分区时会有区别吗
您在这里混合分区和主题,请参阅上面的答案。
2)区分高级别和低级别消费者的完美用例
高级消费者: 我只想使用Kafka作为外部快速持久FIFO缓冲区而不用担心细节问题。
低级消费者: 我希望有一个自定义分区数据消耗逻辑,例如开始从新创建的主题中读取数据,而无需消费者重新连接到经纪人。
3)如果发生故障(即)消息未送达,我在哪里可以找到Kafka中的错误日志。
Kafka使用log4j进行日志记录。它取决于存储日志的配置(如果是生产者和消费者)。 Kafka代理日志通常存储在/ var / log / kafka /.
中