web-dev-qa-db-fra.com

La clé est-elle requise lors de l'envoi de messages à Kafka?

KeyedMessage<String, byte[]> keyedMessage = new KeyedMessage<String, byte[]>(request.getRequestTopicName(), SerializationUtils.serialize(message)); 
producer.send(keyedMessage);

Actuellement, j’envoie des messages sans clé dans le cadre des messages à clé, est-ce que cela fonctionnera toujours avec delete.retention.ms? Dois-je envoyer une clé dans le message? Est-ce que c'est bien de faire la clé dans le message?

70
gaurav

Les clés sont surtout utiles/nécessaires si vous avez besoin d'une commande forte pour une clé et développez quelque chose comme une machine à états. Si vous souhaitez que les messages portant la même clé (par exemple, un identifiant unique) soient toujours vus dans le bon ordre, associer une clé aux messages garantira que les messages portant la même clé iront toujours vers la même partition dans une rubrique. Kafka garantit l'ordre dans une partition, mais pas entre les partitions d'un sujet. Par conséquent, le fait de ne pas fournir de clé - ce qui entraînera une distribution circulaire entre les partitions - ne conservera pas cet ordre.

Dans le cas d'une machine à états, les clés peuvent être utilisées avec log.cleaner.enable pour dédupliquer des entrées avec la même clé. Dans ce cas, Kafka suppose que votre application ne s'intéresse qu'à l'instance la plus récente d'une clé donnée et que le nettoyeur de journaux supprime les doublons les plus anciens d'une clé donnée uniquement si la clé n'est pas nulle. Ce formulaire La compression du journal est contrôlée par la propriété log.cleaner.delete.retention et requiert des clés.

Sinon, la propriété la plus commune , log.retention.hours , activée par défaut, supprime les segments complets du journal qui sont périmés. Dans ce cas, les clés ne doivent pas être fournies. Kafka supprimera simplement les morceaux du journal plus anciens que la période de rétention donnée.

C’est tout, si vous avez activé compaction du journal ou si vous souhaitez un ordre strict pour les messages avec la même clé, vous devez absolument utiliser des clés. Sinon, les clés nulles peuvent fournir une meilleure distribution et éviter les problèmes de point chaud dans les cas où certaines clés peuvent apparaître plus que d'autres.

130
kuujo