/ / spark não pode receber mensagem de Kafka com o novo groupId - apache-spark, apache-kafka

faísca não pode receber mensagem de Kafka com o novo groupId - apache-faísca, apache-kafka

Eu estou usando streaming de faísca para ler a mensagem deKafka, funciona bem. Mas eu tinha um requisito que precisa reler as mensagens. Eu estava pensando que eu só preciso alterar cliente groupId da faísca e reiniciar o aplicativo de fluxo de faísca, ele deve reler a mensagem kafka de início. Mas o resultado foi que Spark não conseguia receber nenhuma mensagem, estou confuso. Pelo documento Kafka, se você alterar o groupId do cliente, ele deverá receber a mensagem do início, pois o kafka o tratará como um novo cliente. Desde já, obrigado!

Respostas:

1 para resposta № 1

Os consumidores de Kafka têm uma propriedade chamada auto.offset.reset Kafka Doc). Isso informa ao consumidor o que fazer quando ele começa a consumir, mas ele ainda não cometeu um deslocamento. Esse é o seu caso. O tópico tem mensagens, mas não há nenhum deslocamento inicial armazenado porque você não leu nada sob essa nova instrução. id do grupo, ainda. Nesta situação, a propriedade auto.offset.reset é usada.Se o valor é "maior", e este é o padrão), a posição inicial é definida como o maior deslocamento (o último) e você obtenha o comportamento que você está vendo. Se o valor for "menor", o deslocamento será definido para o deslocamento inicial e o consumidor lerá toda a partição. Isso é o que você quer.

Então eu não sei exatamente como você definiu aquele Kafkapropriedade em seu aplicativo do Spark, mas você definitivamente deseja que a propriedade seja definida como "menor" se quiser que o novo ID do grupo resulte em uma leitura do tópico inteiro.


2 para resposta № 2

Parece que você está usando a API baseada no receptor de faíscas de streaming para o Kafka. Para isso, o api auto.offset.reset só se aplica se não houver "t offsets" no ZK, como você percebeu.

http://spark.apache.org/docs/latest/streaming-kafka-integration.html#approach-2-direct-approach-no-receivers

Se você quiser poder especificar os deslocamentos exatos, consulte a versão da chamada createDirectStream que toma FromOffsets como um argumento.