[ 
https://issues.apache.org/jira/browse/KAFKA-9568?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17051503#comment-17051503
 ] 

Oleg Khoruzhenko commented on KAFKA-9568:
-----------------------------------------

We run Kafka Streams application with _Static Membership_ and uses _Interactive 
Queries_ functionality. Say we have two instances A and B running on HOST_A and 
HOST_B correspondingly. Then A migrated to another HOST_C. The 
APPLICATION_SERVER_CONFIG changes to the IP of HOST_C.  Issue appears when you 
need to query remote store on the instance A. In that case {{StreamsMetadata}} 
doesn't get updated and returns ip address of HOST_A, even though A is already 
migrated to HOST_C.

Let me try to explain the case we are dealing with on example from 
kafka-streams-example project.
 # I added static group membership to WordCountInteractiveQueriesExample.java 
see 
[https://github.com/o0oxid/kafka-streams-examples/commit/54cb74f40ef3c659588dbedc496bc456123db215]
 
 # Started confluent-platform: {noformat}
48a1ede4f588        confluentinc/cp-enterprise-kafka:5.4.0   
"/etc/confluent/dock…"   2 hours ago         Up 2 hours          
0.0.0.0:9092->9092/tcp, 0.0.0.0:29092->29092/tcp         
kafka-streams-examples_kafka_1
bd6cf95c56b7        confluentinc/cp-zookeeper:5.4.0          
"/etc/confluent/dock…"   2 hours ago         Up 2 hours          2181/tcp, 
2888/tcp, 3888/tcp, 0.0.0.0:32181->32181/tcp   
kafka-streams-examples_zookeeper_1
{noformat}
# Run first application in static group membership mode - group.instance.id 
'client-1' and port '7070'
{noformat}
>  java -cp target/kafka-streams-examples-5.4.0-standalone.jar 
> io.confluent.examples.streams.interactivequeries.WordCountInteractiveQueriesExample
>  7070 localhost:9092 client-1
[2020-03-04 10:38:31,071] WARN [main] The configuration 'admin.retries' was 
supplied but isn't a known config. 
(org.apache.kafka.clients.consumer.ConsumerConfig)
[2020-03-04 10:38:31,072] WARN [main] The configuration 
'admin.retry.backoff.ms' was supplied but isn't a known config. 
(org.apache.kafka.clients.consumer.ConsumerConfig)
Mar 04, 2020 10:38:31 AM org.glassfish.jersey.internal.inject.Providers 
checkProviderRuntime
WARNING: A provider 
io.confluent.examples.streams.interactivequeries.WordCountInteractiveQueriesRestService
 registered in SERVER runtime does not implement any provider interfaces 
applicable in the SERVER runtime. Due to constraint configuration problems the 
provider 
io.confluent.examples.streams.interactivequeries.WordCountInteractiveQueriesRestService
 will be ignored.
[2020-03-04 10:38:49,717] WARN 
[interactive-queries-example-client-StreamThread-1] [Consumer 
instanceId=client-1-1, 
clientId=interactive-queries-example-client-StreamThread-1-consumer, 
groupId=interactive-queries-example] The following subscribed topics are not 
assigned to any members: [interactive-queries-example-word-count-repartition]  
(org.apache.kafka.clients.consumer.internals.ConsumerCoordinator)
{noformat}
# Run second application in different terminal - group.instance.id 'client-2' 
and port '7071'
{noformat}
> java -cp target/kafka-streams-examples-5.4.0-standalone.jar 
> io.confluent.examples.streams.interactivequeries.WordCountInteractiveQueriesExample
>  7071 localhost:9092 client-2
[2020-03-04 10:39:05,188] WARN [main] The configuration 'admin.retries' was 
supplied but isn't a known config. 
(org.apache.kafka.clients.consumer.ConsumerConfig)
[2020-03-04 10:39:05,189] WARN [main] The configuration 
'admin.retry.backoff.ms' was supplied but isn't a known config. 
(org.apache.kafka.clients.consumer.ConsumerConfig)
Mar 04, 2020 10:39:05 AM org.glassfish.jersey.internal.inject.Providers 
checkProviderRuntime
WARNING: A provider 
io.confluent.examples.streams.interactivequeries.WordCountInteractiveQueriesRestService
 registered in SERVER runtime does not implement any provider interfaces 
applicable in the SERVER runtime. Due to constraint configuration problems the 
provider 
io.confluent.examples.streams.interactivequeries.WordCountInteractiveQueriesRestService
 will be ignored.
{noformat}
Querying StreamsMetadata returns two instances 'localhost:7070' and 
'localhost:7071':
{noformat}
curl -s localhost:7070/state/instances | jq
[
  {
    "host": "localhost",
    "port": 7070,
    "storeNames": [
      "windowed-word-count"
    ]
  },
  {
    "host": "localhost",
    "port": 7071,
    "storeNames": [
      "word-count"
    ]
  }
]
{noformat}
Now let's re-run the second application with same group.instance.id 'client-2', 
but different port '7072'
{noformat}
>java -cp target/kafka-streams-examples-5.4.0-standalone.jar 
>io.confluent.examples.streams.interactivequeries.WordCountInteractiveQueriesExample
> 7072 localhost:9092 client-2
[2020-03-04 10:39:05,188] WARN [main] The configuration 'admin.retries' was 
supplied but isn't a known config. 
(org.apache.kafka.clients.consumer.ConsumerConfig)
[2020-03-04 10:39:05,189] WARN [main] The configuration 
'admin.retry.backoff.ms' was supplied but isn't a known config. 
(org.apache.kafka.clients.consumer.ConsumerConfig)
Mar 04, 2020 10:39:05 AM org.glassfish.jersey.internal.inject.Providers 
checkProviderRuntime
WARNING: A provider 
io.confluent.examples.streams.interactivequeries.WordCountInteractiveQueriesRestService
 registered in SERVER runtime does not implement any provider interfaces 
applicable in the SERVER runtime. Due to constraint configuration problems the 
provider 
io.confluent.examples.streams.interactivequeries.WordCountInteractiveQueriesRestService
 will be ignored.
{noformat}
Querying instance metadata returns stale data. Note the port is the same 
'7071', while application is running on '7072':
{noformat}
> curl -s localhost:7070/state/instances | jq
[
  {
    "host": "localhost",
    "port": 7070,
    "storeNames": [
      "windowed-word-count"
    ]
  },
  {
    "host": "localhost",
    "port": 7071,
    "storeNames": [
      "word-count"
    ]
  }
]
{noformat}
So now it's impossible to perform interactive queries against remote machine 
because metadata points to the old port '7071'.

Issue is not reproducible with dynamic membership. 

> Kstreams APPLICATION_SERVER_CONFIG is not updated with static membership
> ------------------------------------------------------------------------
>
>                 Key: KAFKA-9568
>                 URL: https://issues.apache.org/jira/browse/KAFKA-9568
>             Project: Kafka
>          Issue Type: Bug
>          Components: streams
>    Affects Versions: 2.4.0
>            Reporter: David J. Garcia
>            Priority: Major
>
> A kstreams application with static membership, and 
> StreamsConfg.APPLICATION_SERVER_CONFIG set, will NOT update old server config 
> upon restart of application on new host.
> Steps to reproduce:
>  
>  # start two kstreams applications (with same consumer group) and enable 
> static membership (and set application server config to <ip-addr>:<port>)
>  # kill one of the applications and restart it on a new host(with new ip) 
> before timeout ends (so that rebalancing doesn't occur).
>  # the other kstreams application will now have an invalid 
> application_server_config
> Possible fix:
> If an application restarts with a new host/identity..etc, it could trigger a 
> "light-rebalance" where the other applications in the consumer group don't 
> change partition assignments ,but instead just get their configuration 
> updated.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to