X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fwrite_kafka.c;h=2df52a2057036c79cf2d56688f0746261affa8c8;hb=4103105fb43cd72294f165b2541540b3a8a99532;hp=e881593b65161e20af6b697dd122ca2e402829c0;hpb=5eb1fef6de7e0c8fb99e3d85063d96d7cc785f9b;p=collectd.git diff --git a/src/write_kafka.c b/src/write_kafka.c index e881593b..2df52a20 100644 --- a/src/write_kafka.c +++ b/src/write_kafka.c @@ -25,18 +25,16 @@ */ #include "collectd.h" + #include "plugin.h" #include "common.h" #include "configfile.h" -#include "utils_cache.h" #include "utils_cmd_putval.h" #include "utils_format_graphite.h" #include "utils_format_json.h" -#include "utils_crc32.h" #include #include -#include #include struct kafka_topic_context { @@ -73,11 +71,19 @@ static void kafka_log(const rd_kafka_t *rkt, int level, } #endif +static uint32_t kafka_hash(const char *keydata, size_t keylen) +{ + uint32_t hash = 5381; + for (; keylen > 0; keylen--) + hash = ((hash << 5) + hash) + keydata[keylen - 1]; + return hash; +} + static int32_t kafka_partition(const rd_kafka_topic_t *rkt, const void *keydata, size_t keylen, int32_t partition_cnt, void *p, void *m) { - uint32_t key = *((uint32_t *)keydata ); + uint32_t key = kafka_hash(keydata, keylen); uint32_t target = key % partition_cnt; int32_t i = partition_cnt;