@@ -37,6 +37,12 @@ static struct flb_config_map config_map[] = {
3737 "Specify a message key. "
3838 },
3939
40+ {
41+ FLB_CONFIG_MAP_STR , "message_key_field" , NULL ,
42+ 0 , FLB_TRUE , offsetof(struct flb_kafka_rest , message_key_field ),
43+ "Specify a message key field. "
44+ },
45+
4046 {
4147 FLB_CONFIG_MAP_STR , "time_key" , NULL ,
4248 0 , FLB_TRUE , offsetof(struct flb_kafka_rest , time_key ),
@@ -147,7 +153,33 @@ static flb_sds_t kafka_rest_format(const void *data, size_t bytes,
147153 map_size ++ ;
148154 }
149155
150- if (ctx -> message_key != NULL ) {
156+ /*
157+ * Logic for populating Message Key in below mentioned order
158+ * - If Message_Key_Field is defined and present in the record, use it
159+ * - If Message_Key_Field is defined but not present in the record, look for Message_Key
160+ * - If Message_Key is defined, use it
161+ */
162+ char * message_key = NULL ;
163+ size_t message_key_len = 0 ;
164+ if (ctx -> message_key_field && !message_key && val .type == MSGPACK_OBJECT_STR ) {
165+ for (i = 0 ; i < map .via .map .size ; i ++ ) {
166+ key = map .via .map .ptr [i ].key ;
167+ val = map .via .map .ptr [i ].val ;
168+ if (key .via .str .size == ctx -> message_key_field_len &&
169+ strncmp (key .via .str .ptr , ctx -> message_key_field , ctx -> message_key_field_len ) == 0 ) {
170+ message_key = (char * ) val .via .str .ptr ;
171+ message_key_len = val .via .str .size ;
172+ break ;
173+ }
174+ }
175+ }
176+
177+ if (message_key == NULL && ctx -> message_key != NULL ) {
178+ message_key = ctx -> message_key ;
179+ message_key_len = ctx -> message_key_len ;
180+ }
181+
182+ if (message_key != NULL ) {
151183 map_size ++ ;
152184 }
153185
@@ -158,12 +190,11 @@ static flb_sds_t kafka_rest_format(const void *data, size_t bytes,
158190 msgpack_pack_int64 (& mp_pck , ctx -> partition );
159191 }
160192
161-
162- if (ctx -> message_key != NULL ) {
193+ if (message_key != NULL ) {
163194 msgpack_pack_str (& mp_pck , 3 );
164195 msgpack_pack_str_body (& mp_pck , "key" , 3 );
165- msgpack_pack_str (& mp_pck , ctx -> message_key_len );
166- msgpack_pack_str_body (& mp_pck , ctx -> message_key , ctx -> message_key_len );
196+ msgpack_pack_str (& mp_pck , message_key_len );
197+ msgpack_pack_str_body (& mp_pck , message_key , message_key_len );
167198 }
168199
169200 /* Value Map Size */
0 commit comments