X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fwrite_kafka.c;h=614ce0f084df7f9ba09181b21983a2fdbec277a5;hb=2a28b85efff687d0753d816fcf89f6be01605db5;hp=10ae5a578c7f651bba423100b8a5924ee9d8b6ee;hpb=c11a279ed19722816ccc56537a7d928ed06c6bab;p=collectd.git diff --git a/src/write_kafka.c b/src/write_kafka.c index 10ae5a57..614ce0f0 100644 --- a/src/write_kafka.c +++ b/src/write_kafka.c @@ -36,7 +36,6 @@ #include #include -#include #include #include @@ -74,11 +73,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;